在 C# 中反序列化 JSON,而无需容器类

本文关键字:容器类 JSON 反序列化 | 更新日期: 2023-09-27 18:35:28

给定 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类的需求,或者它是否"就是这样"。

谢谢

在 C# 中反序列化 JSON,而无需容器类

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

public class MyData
{
   public string name {get;set;}
}
var dictionary =  JsonConvert.DeserializeObject<Dictionary<string,MyData>>(jsonString);
var myData = dictionary["MyData"];

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

  1. 输出类型已更改:因此,如问题注释中所述,最好在边缘区域中更新类型。
  2. 序列化策略已更改:这可能是从他们这边到构建人工的常见模式对象,其名称与输出类型相对应,在这种情况下,您可以使用反射在边缘动态创建包装器对象(不要忘记缓存反射)
  3. 序列化工具已更改:在这种情况下,最正确的做法是要求提供程序提供该工具的 .net 实现或至少是它的规范。