C#将动态JSON JToken解析为列表

e37o9pze  于 2023-02-17  发布在  C#
关注(0)|答案(1)|浏览(223)

我们可以将动态JSON解析为对象列表List<DiffModel>

public class DiffModel 
{
  public string Property { get; set; }
  public string OldValue { get; set; }
  public string NewValue { get; set; }
}

JSON是在library的帮助下生成的,library有助于比较2个JSON对象并找出差异。
借助JToken patch = jdp.Diff(left, right)方法生成的示例JSON JToken值

{
  "Id": [
    78485,
    0
  ],
  "ContactId": [
    767304,
    0
  ],
  "TextValue": [
    "text value",
    "text14"
  ],
  "PostCode": [
    null
  ]
}

在JSON中,对象中第一项的值为

DiffModel [0] =  Property ="id" OldValue="78485" NewValue="0"
DiffModel [1] =  Property ="contactId" OldValue="767304" NewValue="0"
DiffModel [2] =  Property ="TextValue" OldValue="text value" NewValue="text14"
DiffModel [3] =  Property ="PostCode" OldValue= null NewValue=null

我们能否在动态JSON的属性之间导航并构建类似的模型

hwamh0ep

hwamh0ep1#

您可以像这样定义数据模型:

struct DiffModel
{
    public string Property { get; init; }
    public object OldModel { get; init; }
    public object NewModel { get; init; }
}

我使用的是struct,但您可以使用classrecord,无论您喜欢什么。
然后您可以将JToken转换为Dictionary<string, object[]>

  • 键将是属性名称
  • 值将是属性值
var rawModel = patch.ToObject<Dictionary<string, object[]>>();

最后,您所需要的只是DiffModelKeyValuePair<string, object[]>之间的Map:

var diffModels = rawModel
    .Select(pair => new DiffModel
    {
        Property = pair.Key,
        OldModel = pair.Value.First(),
        NewModel = pair.Value.Last(),
    }).ToArray();

相关问题