繁体   English   中英

使用IXmlSerializable对象序列化对象时出现InvalidOperationException

[英]InvalidOperationException when Serializing an object with a IXmlSerializable object

我在XmlSerializer中遇到了一些有趣的行为。

如果我尝试序列化具有Type对象属性的Type并且该对象实现IXmlSerializable ,则序列化程序将抛出带有InnerExceptionInvalidOperationException

ConsoleApplication1.MyClass类型可能不在此上下文中使用。 要将ConsoleApplication1.MyClass用作参数,返回类型或类或结构的成员,必须将参数,返回类型或成员声明为类型ConsoleApplication1.MyClass(它不能是对象)。 ConsoleApplication1.MyClass类型的对象不能用于未类型的集合,例如ArrayLists。

但是,如果对象没有实现IXmlSerializable ,序列化程序将执行得很好。

这是XmlSerializer处理IXmlSerializable对象的方式中的错误吗?

下面是一个非常基本的案例,会引发此异常。

public class SerializableClass
{
    public object Configuration { get; set; }
}

public class MyClass : IXmlSerializable
{
    public string MyProperty { get; set; }

    public MyClass()
    {
        MyProperty = string.Empty;
    }

    public System.Xml.Schema.XmlSchema GetSchema() { return null; }

    public void ReadXml(System.Xml.XmlReader reader) { /*Read*/ }

    public void WriteXml(System.Xml.XmlWriter writer) { /*Write*/ }
}

class Program
{
    static void Main(string[] args)
    {
        SerializableClass element = new SerializableClass
        {
            Configuration = new MyClass
            {
                MyProperty = "My Awesome Property"
            }
        };

        using (StringWriter writer = new StringWriter())
        {
            XmlSerializer serializer = new XmlSerializer(typeof(SerializableClass), new Type[] { typeof(MyClass) });
            serializer.Serialize(writer, element);
        }
    }
}

SerializableClass中的Configuration属性导致了问题。 它被声明为一个对象,将其更改为MyClass类型将解决您的问题

public class SerializableClass
{
    public MyClass Configuration { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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