我有一个带有名为Name的属性的基类,它具有XmlText属性。
当一个继承的类被序列化时,我得到一个异常说:
有反映类型的错误 '[类型名称]'。 ---> System.InvalidOperationException: 无法序列化'[type]类型的对象 名称]'。基本类型'[基本类型名称]' 有简单的内容,只能是 通过添加XmlAttribute进行扩展 元素。请考虑改变 基类的XmlText成员 字符串数组。
以下是我的类定义,序列化为xml时会出错。
[Serializable]
public class LookupItem
{
[System.Xml.Serialization.XmlAttribute()]
public int ID { get; set; }
[System.Xml.Serialization.XmlText()]
public string Name { get; set; }
}
[Serializable]
public class Vendor : LookupItem
{
public string ContactNumber { get; set; }
}
[Serializable]
public class Vendors : List<Vendor>
{
}
答案 0 :(得分:15)
似乎发生了因为LookupItem
类在其XML表示中没有子元素。因此,XmlSerializer
认为它是simpleContent XML元素。如果向LookupItem
添加一个新属性,该属性将被序列化为XML元素,则它可以正常工作。
我只花了几分钟查看可用的XML序列化属性,但我找不到任何允许指定该类型不是simpleContent
元素的内容......
所以我认为你可以通过添加一个你从未在LookupItem
类中使用的虚拟属性或字段来使它工作。如果您从未为其分配值,它将保持为空且不会被序列化,但会阻止您的类被视为simpleContent
。我知道这是一个肮脏的解决方法,但我认为没有其他简单的方法......
public class LookupItem
{
[System.Xml.Serialization.XmlAttribute()]
public int ID { get; set; }
[System.Xml.Serialization.XmlText()]
public string Name { get; set; }
public object _dummy;
}
(顺便说一句,请注意,XML序列化不需要Serializable
属性。)
无论如何,您真的需要将Name
序列化为XML文本吗?这是非常罕见的,通常XML元素有简单的内容(文本)或子元素......两者的混合使得XML更难阅读,所以除非你被迫这样做,否则我建议你序列化Name
作为属性或子元素。