首页 > 解决方案 > C# 复杂类构造从 JSON 读取/设置值

问题描述

我有个问题; 我有各种(太多)类,作为父/子链接

我最初填充我的顶级类,同时实例化其他类,如下(工作):

TopClass MyClass = new TopClass()
{
    Headers = new someHeaders()
    {
        CorrID = "1234567890",
        RequestID = "1234567890",
        L_Token = "abcdefghijklmnopqrstuvwxyz"
    },
    Body = new someBody()
    {
        access = new AccessHeaders()
        {
            allPs = "allAcc",
            availableAcc = "all"
        },
        CombinedServiceIndicator = false,
        FrequencyPerDay = 10,
        ValidUntil = "2020-12-31"
    },
    ResponseAttributes = new ConsentResponse()
    {
        myId = String.Empty,
        myStatus = String.Empty,
        myName = String.Empty,
        _links_self_href = String.Empty,
        status_href = String.Empty
    }
};

我在上面填充的初始值很少更改,但是随着项目的进行,类的属性会发生变化,并且每个类最终都有许多属性。我需要解析属性并将值设置为与其名称匹配的任何属性,但尽管遵循官方示例,我似乎无法弄清楚原因。(我从使用 Newtonsoft 的 JSON 字符串中读取输入数据 - 已经尝试了所有方法)

我找不到反序列化 JSON并在使用属性名称的情况下为我的属性分配任何值的方法,即不说

MyClass.Body.access.allPs = "Hello"

但类似的东西

var json = response.Content.ReadAsStringAsync().Result.ToString();
var a = new { serverTime = "", data = new object[] { } };
var c = new JsonSerializer();

或者

if (myresponse.Attributes.GetType().GetTypeInfo().GetDeclaredProperty(key) != null)
myresponse.GetType().GetTypeInfo().GetDeclaredProperty(key).SetValue(myresponse, entry.Value);
//and how do I read the value, parse my TopClass and assign the value to correct property?

有人可以帮助我吗?

标签: c#jsonproperties

解决方案


如果 JSON 根据上述类具有正确的结构,则属性的值将自动分配。

就像是:

{
    "Body": 
           "access:
              {
                 "allPs" = "required value"
              }
} 

然后你可以使用:

var result = JsonConvert.DeserializeObject < TopClass > (json );

推荐阅读