在C#中反序列化JSON而不需要容器类?

时间:2014-12-27 12:51:09

标签: c# json deserialization

给定JSON字符串

{"MyData":{"name":"foo"}}

我试图将上面的JSON反序列化为如下所示的结构:

[Serializable]
[DataContract]
public class MyData
{
   [DataMember]
   public string name {get;set;}
}

不幸的是,我可以反序列化这个(使用DataContractJsonSerializer)的唯一方法是将上面的类包装起来:

[Serializable]
[DataContract]
public class MyDataContainer
{
   [DataMember]
   public MyData MyData{get;set;}
}

是否可以使用任何属性修饰MyData以防止需要MyDataContainer类,或者它是否就像它一样'。

由于

2 个答案:

答案 0 :(得分:1)

使用JSON.net解决您的问题,如下所示

public class MyData
{
   public string name {get;set;}
}

var dictionary =  JsonConvert.DeserializeObject<Dictionary<string,MyData>>(jsonString);

var myData = dictionary["MyData"];

答案 1 :(得分:1)

根据@maxp提供的xml,Provider已经更改了自己的输出类型,序列化启动或序列化工具。

  1. 输出类型已更改:正如问题评论中所述,最好更新边缘区域中的类型。
  2. 序列化策略发生了变化:它可能是一种常见的模式,从他们的方面来构建人工 具有一个字段的对象,其名称对应于输出类型,在这种情况下,您可以使用Reflection在边缘上动态创建Wrappers对象(不要忘记缓存反射)
  3. 序列化工具已更改:在这种情况下,最正确的事情是要求提供商.net实现该工具或至少指定它。