Pav*_*nda 5 .net wcf json serializer
我在WCF中写了几个类(数据契约和服务契约),我试图在JSON中序列化和反序列化.如果我需要以下JSON结构,我将如何创建DataContract:
{
"response": {
"locations": {
"location": [
{
"id": "12",
"name": "Hello",
"statusid": "78"
},
{
"id": "5",
"name": "Ann",
"statusid": "8"
}
]
},
"error": "404 error"
}
}
Run Code Online (Sandbox Code Playgroud)
上面的结构非常简单,在如下所述的位置下可以有几个位置细节.所以我需要得到一个数组/列表到"位置"数据成员,如下所述.目前我只有以下DataContract:
[DataContract]
public class Response
{
[DataMember]
public string locations { get; set; }
[DataMember]
public string error{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
请告诉我如何解决这个问题?
Mik*_*rie 11
您要查找的完整对象应该构造为:
[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; }
}
Run Code Online (Sandbox Code Playgroud)
你需要设置对象分层结构,如由所指示的{和},以及了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; }
}
Run Code Online (Sandbox Code Playgroud)
我在这里将这些添加到第二个代码块中,因为这样的结构似乎不必要地复杂化.但是,如果您处于可以更改JSON的预期输出的位置,我将使用第一个块,并将两Id列放入int类型中进行额外更改.
创建这些类型是为了支持类似于WCF服务中的设置以返回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));
}
Run Code Online (Sandbox Code Playgroud)
有关DataContractJsonSerializer的详细信息
另请注意,如果您可以选择设置RESTful Web服务,则可以在60秒内遵循如何创建JSON WCF RESTful服务的准则.
小智 3
访问http://json.codeplex.com/。使用
JsonConvert.SerializeObject()
Run Code Online (Sandbox Code Playgroud)
将您的对象转换为 JSON 字符串。使用
JsonConvert.PopulateObject
Run Code Online (Sandbox Code Playgroud)
将 JSON 字符串转换为对象。
| 归档时间: |
|
| 查看次数: |
23973 次 |
| 最近记录: |