[英]Converting simple Json to Complex Object in c#
我的杰森是
{
Id: 1,
Name:'Alex',
ConnectedObjectName:'Obj',
ConnectedObjectId: 99
}
我希望将此JSON转换为以下对象
Class Response
{
int Id,
string Name,
ConnectedObject Obj
}
Class ConnectedObject
{
string COName,
int COId
}
有没有办法使用DataContractJsonSerializer实现此目的
大多数序列化程序希望对象和数据共享布局-因此,大多数json序列化程序希望ConnectedObjectName
和ConnectedObjectId
存在于根对象上,而不是内部对象上。 通常,如果数据不适合您要映射到的数据,最好的方法是使用与数据和序列化程序匹配的单独的DTO模型,然后从DTO模型映射到实际模型您需要以编程方式,还是使用自动映射器之类的工具。
如果您使用DTO方法,那么这里几乎任何 JSON解串器都可以。 Json.NET
是一个很好的默认设置。 DataContractJsonSerializer会的方式方法我JSONserializers考虑的名单上了。
为了扩展Marc Gravell所说的内容,大多数JSON序列化程序都希望您的JSON类似于以下内容,它们可以正确映射到您的类:
{
"Id": 1,
"Name": "Alex",
"Obj" : {
"COName": "Obj",
"COId": 99
}
}
解决此问题的方法是将JSON读取到与其匹配的对象中,然后将其从该对象映射到所需的对象:
反序列化到该对象:
class COJson {
public int Id;
public string Name;
public string ConnectedObjectName;
public int ConnectedObjectId;
}
然后映射到该对象:
class Response {
public int Id;
public string Name;
public ConnectedObject Obj;
}
class ConnectedObject {
public string COName;
public string COId;
}
像这样:
using(var stream = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
var serializer = new DataContractJsonSerializer(typeof(COJson));
var jsonDto = (COJson)ser.ReadObject(stream);
var dto = new Response(){
Id = jsonDto.Id,
Name = jsonDto.Name,
Obj = new ConnectedObject(){
COName = jsonDto.ConnectedObjectName,
COId = jsonDto.ConnectedObjectId
}
};
return dto;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.