【发布时间】:2015-02-19 16:54:22
【问题描述】:
我有两个继承自抽象类的类
public class Class1 : MainBaseClass
{
public int attrib1 {get; set;}
public int attrib2 {get; set;}
}
public class Class2 : MainBaseClass
{
public int attribx {get; set;}
public int attriby {get; set;}
}
然后我创建了一个 MainBaseClass 类型的列表,以便在一个 JSON 字符串中序列化两个类,但我得到了这个异常
类型异常 'System.Runtime.Serialization.SerializationException' 发生在 System.Runtime.Serialization.dll 但未在用户代码中处理
附加信息:使用数据合同键入“MyProject.Class1” 名称 'Class1:http://schemas.datacontract.org/2004/07/MyProject' 不是 预期的。将任何静态未知的类型添加到已知列表中 类型 - 例如,通过使用 KnownTypeAttribute 属性或通过 将它们添加到传递给的已知类型列表中 DataContractSerializer。
我的方法是这样做的:
Class1 class1 = getData();
Class2 class2 = getData();
Package<MainBaseClass> package = new Package<MainBaseClass>();
package.AddObject(class1)
package.AddObject(class2);
//Here's the error
new ServiceClass().Serialize<Package<MainBaseClass>>(package);
我的包类
public class Package<T>
{
public List<T> Objects = new List<T>();
public Package() { }
public void AddObject(T dto)
{
this.Objects.Add(dto);
}
}
我的序列化方法
public static string Serialize<T>(T entity)
{
MemoryStream stream = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
//Here's the exception
ser.WriteObject(stream, entity);
stream.Position = 0;
StreamReader sr = new StreamReader(stream);
return sr.ReadToEnd();
}
我还在 MainBaseClass 和子类上添加了 [DataContract()] 并且异常仍然存在。
仅当我这样做时才有效,从之前的基类和子类中删除 [DataContract()]。如果不是,我会以空字符串“{}”的形式收到结果
Class1 class1 = getData();
Package<Class1> package = new Package<Class1>();
package.AddObject(class1)
string str = new ServiceClass().Serialize<Package<Class>>(package);
或者这个:
Class1 class1 = getData();
string str = new ServiceClass().Serialize<Class1>(class1);
那么,如何序列化多个不同类型的对象呢?
【问题讨论】:
-
你试过Json.NET吗?
-
那么,如果我理解的话,这将是 .net 框架的限制?为什么它根本不起作用?同时我会审查你的建议。谢谢。
标签: c# json serialization types