【问题标题】:How to deserialize a JSON string that has multilple objects of different type如何反序列化具有多个不同类型对象的 JSON 字符串
【发布时间】:2020-06-07 17:09:41
【问题描述】:

我有以下 json 字符串:"{"\"itemList\":[{\"id\":1,\"name\":\"Item 1 Name\"},{\"id\":2,\"name\":\"Item 2 Name\"}],"listInfo":{"info1":1,"info2":"bla"}}"

我有以下课程:

class ItemClass
{
    public int Id;
    public string Name;
}

class ListInfo
{
    public int Info1 { get; set; }
    public string Info2 { get; set; }
}

如何将我的 json 字符串反序列化为它包含的两个不同对象,ItemList 和 ListInfo? ItemList 应反序列化为 List<ItemClass>。我使用 JsonConvert 多次使用反序列化,但使用代表单个对象的 json 字符串。

【问题讨论】:

    标签: c# json-deserialization jsonconvert


    【解决方案1】:

    首先创建一个临时类来读取Json,

    // New temporary class
        public class TempClass
        {
            public List<ItemClass> ItemList { get; set; }
            public ListInfo ListInfo { get; set; }
        }
    
        public class ItemClass
        {
            public int Id;
            public string Name;
        }
    
        public class ListInfo
        {
            public int Info1 { get; set; }
            public string Info2 { get; set; }
        }
    

    temp-class 之上将保存反序列化的对象。然后使用下面的方式对两个不同的对象进行反序列化和读取。

    List<ItemClass> ItemsList = ((TempClass)JsonConvert.DeserializeObject<TempClass>(strJsom, new JsonSerializerSettings())).ItemList;
    ListInfo ListInfo = ((TempClass)JsonConvert.DeserializeObject<TempClass>(strJsom, new JsonSerializerSettings())).ListInfo;
    

    现在,您可以遍历 ItemsList 以从 Json 中读取每个 ItemClass。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      您的 json 格式不正确。更改"{"\"itemList\":[{\"id\":1,\"name\":\"Item 1 Name\"},{\"id\":2,\"name\":\"Item 2 Name\"}],"listInfo":{"info1":1,"info2":"bla"}}"

      到

      "{\"itemList\":[{\"id\":1,\"name\":\"Item 1 Name\"},{\"id\":2,\"name\":\"Item 2 Name\"}],\"listInfo\":{\"info1\":1,\"info2\":\"bla\"}}"

      然后创建一个这样的类

      public class BaseClass
      {
          public List<ItemClass> ItemList { get; set; }
          public ListInfo ListInfo { get; set; }
      }
      

      并使用 JsonConvert.DeserializeObject 将 json 反序列化到您的班级

      string json = "{\"itemList\":[{\"id\":1,\"name\":\"Item 1 Name\"},{\"id\":2,\"name\":\"Item 2 Name\"}],\"listInfo\":{\"info1\":1,\"info2\":\"bla\"}}";
      var data =  JsonConvert.DeserializeObject<BaseClass>(json);
      

      【讨论】:

      • 我明白了。我在单元测试中这样做。我想我最好对字符串进行比较。有没有办法从 json 字符串中获取 itemList 对象?然后我可以序列化我要与之比较的对象并进行字符串比较。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 2021-02-11
      • 1970-01-01
      相关资源
      最近更新 更多