c# - 使用 JSon.net 将平面 JSON 数据反序列化为结构

标签 c# .net json.net

我正在使用一个返回 JSON 数据的 Web 服务,在许多情况下,该服务返回一个对象中的多个属性,我想在 C# 端将这些属性分组到一个类中。考虑一个像这样的类结构:

  class Person
  {
      public Address Address { get; set; }
      public string Name {  get; set; }
  }

  class Address
  {
      public string StreetAddress { get; set; }
      public string City {  get; set; }
      public string ZipCode {  get; set; }
  }

JSON 数据如:

{ "Name" : "Pilchie",
"StreetAddress" : "1234 Random St",
"City" : "Nowheretown",
"Zip" : "12345"
}

是否可以为我的 PersonAddress 类添加属性,以便它们序列化/反序列化为这种格式?

最佳答案

我认为您无法让 JSON.NET 一次性完成所有工作——您必须手动创建 Person 对象。但是,您可以在不创建单独的 DTO 类的情况下执行此操作。例如:

var jsonText = "{ \"Name\" : \"Pilchie\"," +
            "\"StreetAddress\" : \"1234 Random St\"," +
            "\"City\" : \"Nowheretown\"," +
            "\"Zip\" : \"12345\"" +
            "}";
JObject jsonObject = (JObject) JsonConvert.DeserializeObject(jsonText);

var person =
    new Person
    {
        Address = new Address
                    {
                    City = (String) jsonObject["City"],
                    StreetAddress = (String) jsonObject["StreetAddress"],
                    ZipCode = (string) jsonObject["Zip"]
                    },
        Name = (string) jsonObject["Name"]
    };

和序列化:

JsonConvert.SerializeObject(
    new
    {
        person.Name,
        person.Address.StreetAddress,
        person.Address.City,
        Zip = person.Address.ZipCode
    });

关于c# - 使用 JSon.net 将平面 JSON 数据反序列化为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11583107/

相关文章:

c# - ReferenceEquals 如何理解引用属于同一个对象?

c# - 当类的名称是根元素时,Newtonsoft json 不会反序列化

c# - 创建从 json 到 c# 的类解析

c# - Windows CE 5.0 安全 tcp 端口

c# - 如何使用 SetWindowHookEx 从 C# 应用程序注入(inject) native dll(比使用 CreateRemoteThread 注入(inject)更安全)

.net - 叠加两个控件

c# - 使用 JSON 序列化/反序列化 TimeSpan

c# - MVVM Datagrid 第一行默认选中但未突出显示

c# - LINQ 延迟加载和创建新对象

c# - .NET:有没有办法知道当前正在执行的代码在哪个方法中? (用于日志记录类)