gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:59:56 26 4
gpt4 key购买 nike

我发现 XmlSerializer 有一些有趣的行为。

如果我尝试序列化一个具有 Type 对象属性并且该对象实现了 IXmlSerializable 的类,序列化程序将抛出一个 InvalidOperationException使用 InnerException:

在此上下文中不能使用类型 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; }
}

关于c# - 使用 IXmlSerializable 对象序列化对象时出现 InvalidOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23482793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com