如何XML序列化'类型'

Rob*_*ert 12 c# xml serialization

如何序列化"类型"?

我想序列化为XML一个具有属性的对象,该属性是一种对象.这个想法是,当它被反序列化时,我可以创建一个这种类型的对象.

public class NewObject
{
}

[XmlRoot]
public class XmlData
{
    private Type t;

    public Type T
    {
        get { return t; }
        set { t = value; }
    }
}
    static void Main(string[] args)
    {
        XmlData data = new XmlData();
        data.T = typeof(NewObject);
        try
        {
            XmlSerializer serializer = new XmlSerializer(typeof(XmlData));
            try
            {
                using (FileStream fs = new FileStream("test.xml", FileMode.Create))
                {
                    serializer.Serialize(fs, data);
                }
            }
            catch (Exception ex)
            {

            }
        }
        catch (Exception ex)
        {

        }
    }
Run Code Online (Sandbox Code Playgroud)

我得到此异常:"不期望使用类型ConsoleApplication1.NewObject.使用XmlInclude或SoapInclude属性指定静态未知的类型."

我在哪里放[XmlInclude]?这甚至可能吗?

The*_*ean 18

Typeclass无法序列化,因为System.RuntimeType我们的代码无法访问它,它是一个内部CLR类型.您可以使用类型的名称来解决此问题,如下所示:

public class c 
{       
    [XmlIgnore]
    private Type t;
    [XmlIgnore]
    public Type T {
        get { return t; }
        set { 
                t = value;
                tName = value.AssemblyQualifiedName;
            }
    }

    public string tName{
        get { return t.AssemblyQualifiedName; }
        set { t = Type.GetType(value);}
    }
}
Run Code Online (Sandbox Code Playgroud)


CSh*_*per 3

XML 序列化仅将对象的公共字段和属性值序列化到 XML 流中。XML 序列化不包含类型信息。例如,如果 Library 命名空间中存在一个 Book 对象,则不能保证它将被反序列化为相同类型的对象。

来源:XML 序列化详细信息 | 微软文档