我正在尝试基于JSON字符串从我的visual解决方案中动态实例化一个类。
在我描述我的确切问题之前,我想举一个例子来说明我想要达到的目标。假设我有以下JSON:
{
"Type": "AutoIncrementTag,
"StartFrom": 0,
"Skip": 10,
"LeadingZero": false
}因此,从Json中,我希望找到名为"AutoIncrementTag“的类并实例化它,将其"StartFrom”、"Skip“和"LeadingZero”参数设置为相应的值。
注释1: Json我有两个“标记”类,我想在Json字符串中的"Type“属性上实例化一个不同的类。
注释2: Json字符串将包含超过一个此类“描述”(我相信它们被称为JSON对象,但我还不太熟悉JSON格式)
注释3:我在所有Json解析/转换中使用Newtonsoft.Json。
所以现在轮到我了。
我设法获得Type属性
JObject.Parse(myJsonString).GetValue("Type").ToString();但是,如何获得所有其他值--,因为它们将因所具有的类型不同而有所不同?(我需要一种动态迭代和获取其他属性的值的方法。)
其次,如何将这些属性映射到C#对象。我想过用
Activator.CreateInstance(Type type, object[] args)但是,如何(动态地)从json格式中描述的属性获得object[]。
发布于 2017-04-13 10:38:58
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);https://stackoverflow.com/questions/43389772
复制相似问题