【发布时间】:2023-01-28 16:15:00
【问题描述】:
Test1 反序列化具有单个数组 (data:[]) 的 msg1 成功。 ElementJsonConverter 处理比示例中更复杂的 ElementData。
Test2 尝试反序列化具有嵌套数组 (data:[[]]) 的 msg2。 Message2 类有 Table 类,当 TableRow 是我需要填充的 List<ElementData> 时,它有 List<TableRow>。我不明白该怎么做。我是否需要以某种方式为Table 和TableRow 设置单独的转换器?
单阵列
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(...){}
}
【问题讨论】: