我在XmlSerializer中遇到了一些有趣的行为。
如果我尝试序列化具有Type
对象属性且该对象实现IXmlSerializable
的类,则序列化程序将使用InvalidOperationException
抛出InnerException
:< / p>
在此上下文中不能使用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);
}
}
}
答案 0 :(得分:0)
SerializableClass中的Configuration属性导致了问题。它被声明为一个对象,将其更改为MyClass类型将解决您的问题
public class SerializableClass
{
public MyClass Configuration { get; set; }
}