您要查找的完整对象应构造为:
[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; }
}
您需要设置对象层次结构,如 和 所示{
,}
以及 IEnumerable / 数组属性,如所需 JSON 输出中的[
和所示。]
该站点可能会造成混淆,因为没有简单的示例,但请查看介绍 JSON以获得对语法的基本了解。我遇到的另一个很好的站点是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; }
}
我在这里将这些添加到第二个代码块中,因为这样的结构看起来不必要地复杂。但是,如果您处于可以更改 JSON 的预期输出的位置,我将使用第一个块,另外更改将两Id
列转换为int
类型。
创建这些类型是为了支持类似于在WCF Service 中设置以返回 JSON的服务,并使用以下代码进行测试:
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 服务,则可以遵循如何在 60 秒内创建 JSON WCF RESTful 服务的指南。