繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM