首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#将动态JSON JToken解析为列表

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

Stack Overflow用户
提问于 2021-11-10 13:57:29
回答 1查看 461关注 0票数 1

我们能把一个动态JSON解析成一个对象List<DiffModel>列表吗?

代码语言:javascript
复制
public class DiffModel 
{
  public string Property { get; set; }
  public string OldValue { get; set; }
  public string NewValue { get; set; }
} 

JSON是在图书馆的帮助下生成的,它有助于比较2个JSON对象并找出它们之间的差异。这些差异被存储为一个JToken

用JToken方法生成的示例JSON值

代码语言:javascript
复制
{
  "Id": [
    78485,
    0
  ],
  "ContactId": [
    767304,
    0
  ],
  "TextValue": [
    "text value",
    "text14"
  ],
  "PostCode": [
    null
  ]
}

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

代码语言:javascript
复制
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属性之间导航并构建类似的模型吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-10 15:02:12

您可以定义如下数据模型:

代码语言:javascript
复制
struct DiffModel
{
    public string Property { get; init; }
    public object OldModel { get; init; }
    public object NewModel { get; init; }
}

我使用过struct,但您可以使用classrecord,任何您喜欢的。

然后,您可以将JToken转换为Dictionary<string, object[]>

  • 密钥将是属性名。
  • 该值将是属性值。
代码语言:javascript
复制
var rawModel = patch.ToObject<Dictionary<string, object[]>>();

最后,您需要的只是DiffModelKeyValuePair<string, object[]>之间的映射。

代码语言:javascript
复制
var diffModels = rawModel
    .Select(pair => new DiffModel
    {
        Property = pair.Key,
        OldModel = pair.Value.First(),
        NewModel = pair.Value.Last(),
    }).ToArray();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69914585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档