[英]Problem with serialization derivative class in C#
我有这样的代码:
[Serializable]
public class A {
public int X { get; set; }
}
[Serializable]
public class B : A{
}
[Serializable]
public class C {
public A A { get; set; }
}
...
public string Serialize<T>(T obj)
{
StringBuilder stringBuilder = new StringBuilder();
TextWriter stringWriter = new StringWriter(stringBuilder);
XmlWriter xmlWriter = new XmlTextWriter(stringWriter);
XmlSerializer serializer = new XmlSerializer(typeof(T));
serializer.Serialize(xmlWriter, obj);
xmlWriter.Close();
stringWriter.Close();
return stringBuilder.ToString();
}
private void Run() {
C c = new C() {A = new B()};
string str = Serialize(c);
}
我在执行string str = SerializationManager.Serialize(c);
System.InvalidOperationException
string str = SerializationManager.Serialize(c);
带有文本"There was an error generating the XML document."
如何编写我的代码以无例外地序列化c
?
您需要告诉它有关继承的信息:
[XmlInclude(typeof(B)]
public class A {
public int X { get; set; }
}
public class B : A{
}
请注意,您不需要 [Serializable]
对XmlSerializer
。
另外-查看内部异常:
try { ... }
catch (Exception ex) {
while(ex != null) {
Console.WriteLine(ex.Message);
ex = ex.InnerException;
}
}
查看:
“类型B不是预期的。使用XmlInclude或SoapInclude属性来指定静态未知的类型。”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.