public class SerializablionHelper
{
public SerializablionHelper()
{
this.Entities = new Collection<Base>();
}
public ICollection<Base> Entities { get; set; }
}
// [DataContract]
// [KnownType(typeof(A))]
// [KnownType(typeof(B))]
public abstract class Base
{
}
[DataContract]
public class A : Base
{
public int IntTest { get; set; }
[DataMember]
public string StringTest { get; set; }
}
[DataContract]
public class B : Base
{
[DataMember]
public int IntTest { get; set; }
[DataMember]
public string StringTest { get; set; }
}
public static void Main(string[] args)
{
var objectA = new A { IntTest = 5, StringTest = "TestA" };
var objectB = new B { IntTest = 25, StringTest = "TestB" };
var serList = new SerializablionHelper();
serList.Entities.Add(objectA);
serList.Entities.Add(objectB);
var dcSerializer = new DataContractSerializer(typeof(SerializablionHelper));
var xmlWriterSetting = new XmlWriterSettings() { Indent = true };
using (var xmlWriter = XmlWriter.Create("C:\\test.xml", xmlWriterSetting))
{
dcSerializer.WriteObject(xmlWriter, serList);
}
}当我运行这段代码时,我会得到这个异常。
类型'XMLSerializer.Program+A‘不能从未标记为DataContractAttribute或SerializableAttribute的类型继承。考虑使用DataContractAttribute或SerializableAttribute标记基类型‘DataContractAttribute’或SerializableAttribute,或者从派生类型中删除它们。
当我重新提出这个代码时:
// [DataContract]
// [KnownType(typeof(A))]
// [KnownType(typeof(B))]密码会起作用的。
无法将基类设置为DataContract的问题。在不将DataContract添加到基类或我必须采取另一个序列化策略的情况下,是否有任何方法使此代码工作?
发布于 2013-08-22 13:29:33
我想这样做:
[DataContract]
[KnownType(typeof(A))]
[KnownType(typeof(B))]
public class SerializablionHelper
{
public SerializablionHelper()
{
//this.Entities = new Collection<Base>();
}
// public ICollection<Base> Entities { get; set; }
public Base A { get; set; }
public Base B { get; set; }
}
public abstract class Base
{
}
[DataContract]
public class A : Base
{
[DataMember]
public int IntTest { get; set; }
[DataMember]
public string StringTest { get; set; }
}
[DataContract]
public class B : Base
{
[DataMember]
public int IntTest { get; set; }
[DataMember]
public string StringTest { get; set; }
}
public static void Main(string[] args)
{
var objectA = new A { IntTest = 5, StringTest = "TestA" };
var objectB = new B { IntTest = 25, StringTest = "TestB" };
var serList = new SerializablionHelper { A = objectA, B = objectB };
var dcSerializer = new DataContractSerializer(typeof(SerializablionHelper));
var xmlWriterSetting = new XmlWriterSettings() { Indent = true };
using (var xmlWriter = XmlWriter.Create("C:\\test.xml", xmlWriterSetting))
{
dcSerializer.WriteObject(xmlWriter, serList);
}
}我希望这能帮上忙。
https://stackoverflow.com/questions/18381494
复制相似问题