Kyl*_*ven 5 c# serialization object xml-serialization
我在 XmlSerializer 中遇到了一些有趣的行为。
如果我尝试序列化一个具有Typeobject属性并且该对象实现的类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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
    小智 0
SerializedClass 中的 Configuration 属性导致了问题。它被声明为一个对象,将其更改为 MyClass 类型将解决您的问题
public class SerializableClass
{
    public MyClass Configuration { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           339 次  |  
        
|   最近记录:  |