反序列化 C# 中的列表列表

Deserialize list of lists in C#

我收到来自 API

的以下回复

[[{\"message\":\"example message\"}]]

我尝试将其反序列化为列表列表,如下所示

public class ErrorMessage
{
    [JsonProperty("message")]
    public string Message;
}
public class ErrorMessages
{
    public List<ErrorMessage> Messages;
}
public class ErrorMessagesList
{
    public List<ErrorMessages> MessagesList;
}

反序列化失败,如何反序列化?

你用的是什么解串器?您在 JSON.

中缺少消息或消息列表 属性
{"Messages":[[{"message":"example message"}]]}

可以反序列化为:

public class ErrorMessage
{
    [JsonProperty("message")]
    public string Message;
}

public class ErrorMessages
{
    public List<List<ErrorMessage>> Messages;
}

这段代码对我有用:

 var someJson = "[[{\"message\":\"example message\"}]]";
 var result = JsonConvert.DeserializeObject<List<List<ErrorMessage>>>(someJson);
 Debug.Assert(result.First().First().Message == "example message");

您拥有 ErrorMessage class 实例的集合。在代码中,我反序列化成一个List of ErrorMessage的List。所以结果中的第一项是 ErrorMessage 列表。该列表中的第一项是 ErrorMessage,该对象的 Message 属性 是 "example message".

如果您的 JSON 看起来像这样,它仍会使用 DeserializeObject 调用进行反序列化,但您正在查看的内容会更明显:

var moreJson = @"[
                    [
                        {""message"": ""First message""},
                        {""message"": ""Second message""},
                        {""message"": ""Third message""}
                    ],
                    [
                        {""message"": ""Fourth message""},
                        {""message"": ""Fifth message""}
                    ]
                ]";

ErrorMessage的List列表在这段代码中比较明显。但是,这两个示例中的类型相同