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

C# Parse a dynamic JSON JToken to a List

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

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

JSON 是在 library 的帮助下生成的,它有助于比较 2 个 JSON 对象并找出差异。差异存储为 JToken

示例 JSON 在帮助下生成的 JToken 值 JToken patch = jdp.Diff(left, right) 方法

{
  "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 的属性之间导航并构建类似的模型

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

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[]> 之间的映射:

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