C# 使用json.net将json反序列化为.net对象
将某些JSON字符串反序列化回.net对象时遇到问题。我有一个容器类,它包含一些来自外部的信息,有一个字段调用C# 使用json.net将json反序列化为.net对象,c#,.net,serialization,json.net,deserialization,C#,.net,Serialization,Json.net,Deserialization,将某些JSON字符串反序列化回.net对象时遇到问题。我有一个容器类,它包含一些来自外部的信息,有一个字段调用ClassType,它定义了信息的类型,实际内容在另一个属性中,当前可以是任何内容,因此我们将其定义为对象类型 下面是有助于理解问题的.net类定义 class ClassOne { public string Name { get; set; } public int Age { get; set; } } class ClassTwo { public st
ClassType
,它定义了信息的类型,实际内容在另一个属性中,当前可以是任何内容,因此我们将其定义为对象类型
下面是有助于理解问题的.net类定义
class ClassOne
{
public string Name { get; set; }
public int Age { get; set; }
}
class ClassTwo
{
public string AddressLine { get; set; }
public string AddressLine2 { get; set; }
}
class ClassThree
{
public string Country { get; set; }
public string Passport { get; set; }
}
class ContainerClass
{
public string ClassType { get; set; }
public object ClassContent { get; set; }
}
当以JSON格式从外部获取信息时,类似于:
{"ClassType":"Class1","ClassContent":{"Name":"James","Age":2}}
我正在使用Newtonsoft JSON.net库来反序列化JSON字符串。似乎默认的反序列化函数只是将其反序列化为Newtonsoft.Json.Linq.JContainer
。我只是想知道如何根据ClassType
定义编写一些转换器来反序列化ClassContent
。任何代码示例都将受到高度赞赏。示例:
var container = JsonConvert.DeserializeObject<ContainerClass>(json);
JContainer content = (JContainer)container.ClassContent;
switch(container.ClassType)
{
case "Class1": return container.ToObject(typeof(ClassOne));
..
}
var container=JsonConvert.DeserializeObject(json);
JContainer content=(JContainer)container.ClassContent;
开关(container.ClassType)
{
案例“Class1”:返回容器.ToObject(typeof(ClassOne));
..
}
我会选择动态的方式,比如:
string json = @"{""ClassType"":""Class1"",""ClassContent"":{""Name"":""James"",""Age"":2}}";
dynamic jObj = JObject.Parse(json);
if (jObj.ClassType == "Class1")
{
Console.WriteLine("{0} {1}", jObj.ClassContent.Name, jObj.ClassContent.Age);
}
因为返回一个对象(ClassContent)并没有多大意义,您必须以某种方式将其转换为一个具体的类(使用一些if或switch)。使用dynamic和call.ToObject(Type) 试试下面的方法
var jsonObject = JObject.Parse(jsonString);
var result = jsonObject.ToObject(Type.GetType("namespace.className"));
var jsonObject = JObject.Parse(jsonString);
var result = jsonObject.ToObject(Type.GetType("namespace.className"));