2012-01-04 208 views
3

我想将下面的json转换成一个域对象。如何将json字符串反序列化为域对象?

JSON:

[{"name":"McDonalds","deals":[{"desc":"Onion Rings free with Double Cheese burgers"}],"geometry":{"lat":13.073412,"lng":80.221393}},{"name":"JusSportz","deals":[{"desc":"20% off on Wilson Rackets"}],"geometry":{"lat":13.073231,"lng":80.221181}}] 

型号:

[DataContract] 
    public class Deal 
    { 
     [DataMember(Name="name")] 
     public string Store { get; set; } 

     [DataMember(Name="deals")] 
     public Offer[] Offers {get; set;} 

     [DataMember(Name="geometry")] 
     public GeoCoordinate Location { get; set; } 

    } 

    [DataContract] 
    public class Offer 
    { 
     [DataMember] 
     public string deal; 
    } 

我试过DataContractJsonSerializer是在System.Runtime.Serialization.Json命名空间,显然有没有办法将字符串转换为对象。有没有其他的库让我完成这件事?或者有没有办法使用这个库来完成这个任务(通过将Json字符串转换为某种中间格式)?

回答

2

下面是如何反序列化JSON回到我的域对象。

using (var reader = new MemoryStream(Encoding.Unicode.GetBytes("YourStringValue"))) 
{ 
    var ser = new DataContractJsonSerializer(typeof(Deal)); 
    return (Deal)ser.ReadObject(reader); 
} 

这是你在找什么?

+0

我认为是这样,我也认为我可能会转换一系列交易,而(错误地)将其转换为交易。我得到一个无效的转换异常。我试试看,并接受它,如果它的工作 – gprasant 2012-01-05 04:23:49

+0

请确保您反序列化您的所有类具有您的数据合同属性。如果没有,您可能会遇到更多的序列化问题。 – 2012-01-06 18:46:42

1

试着改了一下型号:

[DataContract] 
public class Deal 
{ 
    [DataMember(Name="name")] 
    public string Store { get; set; } 

    [DataMember(Name="deals")] 
    public Offer[] Offers {get; set;} 

    [DataMember(Name="geometry")] 
    public GeoCoordinate Location { get; set; } 

} 

[DataContract] 
public class Offer 
{ 
    [DataMember(Name="desc")] 
    public string deal { get; set; } 
} 
+0

我不认为它与模型的问题。我认为它显示即时通讯转换/解析JSON。 – gprasant 2012-01-05 04:24:44

相关问题