【问题标题】:How to deserialize nested array in my case to custom classes?如何将我的嵌套数组反序列化为自定义类?
【发布时间】:2023-01-28 16:15:00
【问题描述】:

Test1 反序列化具有单个数组 (data:[]) 的 msg1 成功。 ElementJsonConverter 处理比示例中更复杂的 ElementData

Test2 尝试反序列化具有嵌套数组 (data:[[]]) 的 msg2Message2 类有 Table 类,当 TableRow 是我需要填充的 List<ElementData> 时,它有 List<TableRow>。我不明白该怎么做。我是否需要以某种方式为TableTableRow 设置单独的转换器?

单阵列

void Test1()
{
   var msg1 = "{\"type\":\"message1\",\"data\":[{\"name\":\"myname\",\"amount\":0}]";
   var obj = JsonConvert.DeserializeObject<Message1>(msg1);
}

public class Message1
{
    [JsonProperty("type")]
    public string Type { get; set; }
    [JsonProperty("data", ItemConverterType = typeof(ElementJsonConverter))]
    public List<ElementData> Data { get; set; }
}

public abstract class ElementData
{   
    [JsonProperty("amount")]
    public int Amount { get; set; }
}

public class Element : ElementData
{   
    [JsonProperty("name")]
    public string Name{ get; set; }
}

嵌套数组

void Test2()
{
   var msg2 = "{\"type\":\"message2\",\"data\":[[{\"name\":\"myname\",\"amount\":0}]]";
   var obj = JsonConvert.DeserializeObject<Message1>(msg2);
}

public class Message2
{
    [JsonProperty("type")]
    public string Type { get; set; }

    [JsonConverter(typeof(TableJsonConverter))]
    [JsonProperty("data")]
    public Table Data { get; set; }
}

public class Table
{
    public List<TableRow> Steps { get; set; }
}

public class TableRow
{
    [JsonProperty(ItemConverterType = typeof(StepElementJsonConverter))]
    public List<ElementData> Elements { get; set; }
}

public class TableJsonConverter : JsonConverter<Table>
{
    public override Table ReadJson(JsonReader reader, Type objectType, Table existingValue, bool hasExistingValue, Newtonsoft.Json.JsonSerializer serializer)
    {          
    }

    public override void WriteJson(...){}
}

【问题讨论】:

    标签: c# json.net


    【解决方案1】:

    听起来您已经使用单个 ElementJsonConverter 成功反序列化了具有单个数组 (data:[]) 的消息 (msg1)。但是,您在使用同一转换器反序列化具有嵌套数组 (data:[[]]) 的更复杂的消息 (msg2) 时遇到了问题。

    根据您的描述,听起来 msg2 中的 Table 类具有嵌套结构(List,其中 TableRow 是一个 List),现有 ElementJsonConverter 未涵盖该结构。为了反序列化这个嵌套结构,您可能需要为 Table 和 TableRow 类创建单独的转换器,专门用于处理 TableRow 类中的嵌套列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 2021-12-24
      • 2016-02-28
      • 1970-01-01
      相关资源
      最近更新 更多