【发布时间】:2020-03-05 14:03:03
【问题描述】:
我有一个由嵌套的序列化对象组成的 Json 文件。
反序列化此文件时,我会根据需要重建嵌套对象,执行以下操作:
var SomeNestedObjects= JsonConvert.DeserializeObject<SomeNestedObjectsFormat>(File.ReadAllText(@"e:\file.json"));
现在,一切都很好,因为我的系统定义了所有这些嵌套对象,因此 JsonConverter 能够从该 Json 文件中的任何内容中创建和初始化批次。
我想做的是有一个空的虚拟模块,并根据在 Json 文件中找到的内容在运行时构建/构建/填充。我们以下面的Json文件为例,包含1个由2个参数组成的模块:
{
"Name": "DummyModule",
"param1": {
"Value": 456,
"Name": "Param1",
"MinValue": 0,
"MaxValue": 500
},
"param2": {
"Value": false,
"Name": "Param2",
"MinValue": false,
"MaxValue": true
}
}
现在,我的系统有一个类 Parameter,但我的 DummyModule 类对 Param1 和 Param2 一无所知。原因是这个 DummyModule 可以由任何东西组成,并且可以在运行时更改。
所以我想做的是能够在我读取我的 Json 时在运行时向我的 DummyModule 添加属性。为了做到这一点,我需要在我的 DummyModule 构造函数中做一些魔法,基于从 Json 中读取的内容。
问题是我不知道我的构造函数如何访问或传递有关 Json 文件的信息。这是我的 DummyModule() 类:
public class DummyModule
{
public string Name { get; set; }
[JsonConstructor]
public DummyModule()
{
// Use Json Object here to create/add my "Param1" and "Param2" properties on the fly
// ...
// Something of the sort:
foreach (var param in jsonObject)
CreateProperty(tb, param.FieldName, param.FieldType);
}
}
【问题讨论】:
-
也许您能找到对这个问题有用的最佳答案:stackoverflow.com/questions/23017716/…
-
谢谢,我以前做过类似的事情,但我希望不需要所有额外的逻辑。如果我可以将加载的 Json 数据传递给我的 DummyModule() 构造函数,而不需要所有这些。
标签: c# json object deserialization