-1

我有以下 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以及ListInfoItemList应该反序列化为List<ItemClass>. 我使用 JsonConvert 多次使用反序列化,但使用表示单个对象的 json 字符串。

4

2 回答 2

1

您的 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);
于 2020-02-24T04:52:41.570 回答
0

首先创建一个临时类来读取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;

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

希望这可以帮助。

于 2020-02-24T05:39:28.127 回答