【发布时间】:2017-06-05 18:38:24
【问题描述】:
{
"Class1": {
"Class2": [
{"Name": "DerivedV1"},
{"Name": "DerivedV2"},
{"Name": "DerivedV3"}
]
}
}
JsonConvert.DeserializeObject<Class1>(jsonString, settings);
public class Class1
{
public List<BaseClass> DerivedClasses { get; set; }
}
public abstract BaseClass
{
public string Name { get; set; }
public abstract bool DoSomething;
}
public class DerivedV1 : BaseClass
{
public override bool DoSomething()
{
// Logic here, different for each derived class.
}
}
在尝试反序列化 Class1 时,我不知道如何创建从名称分类的派生类列表。我不能声明类似于 List BaseClass 的东西,其中 BaseClass 是抽象的,我不确定如何在 Class2 内的反序列化期间使用反射来从“名称”值确定派生类。我还研究了 ICloneable,但在这种情况下没有得到任何结果。
编辑:
这是我最终从 get 和 set 创建和调用的内容
public static List<T> DeserializeJObjectsToObjects<T>(IEnumerable<JObject> jObjects, string typeKey, string nameSpaceOfClass)
{
Assembly assembly = Assembly.GetExecutingAssembly();
List<T> convert = new List<T>();
foreach (var jObject in jObjects)
{
JToken typeName;
jObject.TryGetValue(typeKey, out typeName);
string fullNameSpace = string.Format(namespaceFormat, nameSpaceOfClass, typeName);
Type t = Type.GetType(string.Format(fullNameSpace));
convert.Add((T) Activator.CreateInstance(t));
}
return convert;
}
public static List<JObject> SerializeObjectsToJObjects<T>(IEnumerable<T> variableObjects )
{
List<JObject> convert = new List<JObject>();
foreach (T variableObject in variableObjects)
{
var jsonString = JsonConvert.SerializeObject(variableObject);
convert.Add(JObject.Parse(jsonString));
}
return convert;
}
【问题讨论】:
-
能否提供一些您在反序列化过程中尝试过的代码?
-
您要达到什么目的,反序列化您提供的 json 的预期结果是什么?
-
添加了一些我尝试过的基本代码,这些代码不起作用,但希望能显示我正在尝试做的事情。
标签: c# .net json serialization deserialization