我通过网络发送 3 个 .net 对象:
- List<int>
- List<ParentObject>
- string
这就是我序列化的方式(所有类型都相同):
JsonSerializerSettings JSsettings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Arrays
};
string message = JsonConvert.SerializeObject(listOfParents, JSsettings);
//listOfParents is of type List<ParentObject>
ParentObject 是一个抽象类,有两个子类。它有一个属性来获取它代表的子类型。
public enum EntityType {Child1, Child2};
class ParentObject
{
public EntityType et { get; set; }
//..other members
}
我想根据收到的 3 个对象中的哪一个来调用 3 个不同的函数。
Object genericObject = JsonConvert.DeserializeObject(message, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto
});
if (genericObject is List<int>)
{
List<int> myList= (List<int>)genericObject;
myfunction1(myList);
}
if (genericObject is List<ParentObject>)
{
//etc..
ParentObject 导致 DeserializeObject() 出现问题,因为它说“无法创建 ParentObject 类型的实例。类型是接口或抽象类,无法实例化”。所以我想我可能需要在http://james.newtonking.com/projects/json/help/index.html?topic=html/CustomCreationConverter.htm使用 CustomCreationConverter
这仍然不能解决我的问题,因为 CustomCreationConverter在反序列化期间需要该类型,而我直到反序列化之后才检查类型。
有什么解决问题的建议吗?