我正在尝试基于JSON字符串从我的visual studio解决方案动态实例化一个类。
在我描述我的确切问题之前,我想举例说明我想要实现的目标。 假设我有以下JSON:
{
"Type": "AutoIncrementTag,
"StartFrom": 0,
"Skip": 10,
"LeadingZero": false
}
所以从那个Json,我想找到名为“AutoIncrementTag”的类并实例化它,设置它的“ StartFrom ”,“ Skip ”和“ LeadingZero “对应的correspoding值。
注1:我有几个theese“Tag”类,我想在我的Json字符串中的“Type”属性上实例化一个不同的。
注2:我的Json字符串将包含多个这些类“描述”(我相信它们被称为JSON对象,但我还不太熟悉JSON格式)< / p>
注3 :我正在使用Newtonsoft.Json进行所有Json解析/转换。
所以,现在我的问题。
我设法使用
获取Type属性JObject.Parse(myJsonString).GetValue("Type").ToString();
然而,我将如何获得所有其他值,因为根据我的类型,它们会有所不同? (我需要一种动态迭代并获取其他属性值的方法。)
其次,我如何将这些属性映射到C#对象。 我想过使用
Activator.CreateInstance(Type type, object[] args)
但我如何(动态)从我的json格式中描述的属性中获取对象[]。
答案 0 :(得分:2)
JSON.Net(即Newtonsoft.Json)已为您完成此操作。例如,让我们从基础类开始:
public class Thing
{
public int SomeValue { get; set; }
public string AnotherValue { get; set; }
}
它的一个例子:
var thing = new Thing { SomeValue = 5, AnotherValue = "blah" };
我们可以使用自定义设置对象进行反序列化,特别是设置TypeNameHandling
属性
var settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
};
var json = JsonConvert.SerializeObject(thing, settings);
这将给出类似的输出:
{
"$type":"Thing, Namespace",
"SomeValue": 5,
"AnotherValue": "blah"
}
要将其恢复到正确的对象类型,只需使用相同的设置:
var anotherThing = JsonConvert.DeserializeObject(json, settings);