C#中序列化派生类的问题

And*_*hin 1 .net c# serialization

我有这样的代码:

[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);
    }      
Run Code Online (Sandbox Code Playgroud)

我已经System.InvalidOperationException执行string str = SerializationManager.Serialize(c);了文本"There was an error generating the XML document."

如何编写我的代码以c无异常地序列化?

Mar*_*ell 7

您需要告诉它有关继承的信息:

[XmlInclude(typeof(B)]
public class A {
    public int X { get; set; }
}
public class B : A{        
}
Run Code Online (Sandbox Code Playgroud)

请注意,您没有需要[Serializable]XmlSerializer.

另外 - 看看内部异常:

try { ... }
catch (Exception ex) {
    while(ex != null) {
        Console.WriteLine(ex.Message);
        ex = ex.InnerException;
    }
}
Run Code Online (Sandbox Code Playgroud)

查看:

"不期望类型B.使用XmlInclude或SoapInclude属性指定静态未知的类型."