我有一个基类BaseClass
和一个派生DerivedClass
的二分之一的程序集。我正在DerivedClass
使用以下方法 (T= BaseClass
) 序列化 的实例:
public static string SerializeDataContract<T>(T obj)
{
using (var stream = new MemoryStream())
{
using (var reader = new StreamReader(stream))
{
var serializer = new DataContractSerializer(typeof(T));
serializer.WriteObject(stream, obj);
stream.Position = 0;
return reader.ReadToEnd();
}
}
}
我得到了以下异常: SerializationException :将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。
如何在DerivedClass
不更改序列化方法的情况下序列化一个实例?(记住:DerivedClass 在另一个程序集中)
我目前使用以下,但我不是一个大粉丝。一些想法?
//In base class
[KnownType("GetKnownType")]
public abstract class GetcReceiverContextBase
{
public static event Func<IEnumerable<Type>> KnownTypeRequired;
private static IEnumerable<Type> GetKnownType()
{
var types = new List<Type>();
if (KnownTypeRequired != null)
return KnownTypeRequired();
return types.ToArray();
}
//In derived Class
public class DerivedClass : BaseClass
{
static MT514ContextMock()
{
KnownTypeRequired += () => new List<Type> { typeof(MT514ContextMock) };
}