探している完全なオブジェクトは、次のように構成されている必要があります。
[DataContract(Name="response")]
public class Response
{
[DataMember(Name = "locations")]
public IEnumerable<Location> Locations { get; set; }
[DataMember(Name = "error")]
public string Error { get; set; }
}
[DataContract(Name = "location")]
public class Location
{
[DataMember(Name = "id")]
public string Id { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "statusid")]
public string StatusId { get; set; }
}
{
およびで示されるように、オブジェクト階層を設定する必要があります。また、目的の JSON 出力からおよび}
で示されるように、IEnumerable / 配列プロパティも設定する必要があります。[
]
簡単な例がないため、このサイトはわかりにくいかもしれませんが、構文の基本的な理解については、JSON の紹介を参照してください。私が思いついたもう 1 つの良いサイトは、いくつかの簡単な例だけでしたが、ASP.NET Web API での JSON と XML のシリアル化です。
vittore によるいくつかのガイダンスのおかげで、JSON 出力と完全に一致するものを作成するには、次のようなオブジェクトが必要になることに気付きました。
[DataContract]
public class ResponseParent
{
[DataMember(Name = "response")]
public Response ResponseInstance { get; set; }
}
[DataContract]
public class Response
{
[DataMember(Name = "locations")]
public LocationCollectionIntermediate Locations { get; set; }
[DataMember(Name = "error")]
public string Error { get; set; }
}
[DataContract]
public class LocationCollectionIntermediate
{
[DataMember(Name = "location")]
public IEnumerable<Location> Locations { get; set; }
}
[DataContract]
public class Location
{
[DataMember(Name = "id")]
public string Id { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "statusid")]
public string StatusId { get; set; }
}
このような構造は不必要に複雑に見えるため、これらをここで 2 番目のコード ブロックに追加しました。ただし、JSON の予想される出力を変更できる立場にある場合は、最初のブロックを使用し、2 つのId
列をint
型にするという追加の変更を行います。
これらの型は、 JSON を返すための WCF サービスでのセットアップと同様のサービスをサポートするために作成され、次のコードを使用してテストされました。
string json;
using (var ms = new MemoryStream())
{
var ser = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(ResponseParent));
ser.WriteObject(ms, r);
json = System.Text.Encoding.UTF8.GetString(ms.GetBuffer(), 0, Convert.ToInt32(ms.Length));
}
DataContractJsonSerializerの詳細
また、RESTful Web サービスをセットアップするオプションがある場合は、How to create a JSON WCF RESTful Service in 60 secondsのガイドラインに従うことができます。