我正在尝试用 C# 编写一个用于书籍导入工具的 ONIX。我首先使用 Xsd2Code 创建类,并获得了一个包含所有属性的巨大文件,经过一些调整后在反序列化时不会产生任何错误。
我试图一次将整个元素反序列化为内存中的一个大对象,然后对其进行处理(例如将其保存到数据库)。
Xsd2Code 生成类的方式,除了有很多属性之外,至少对我来说有点奇怪。
这是应该是 Product 对象的属性的类之一:
public partial class NotificationType
{
public NotificationTypeRefname refname { get; set; }
public NotificationTypeShortname shortname { get; set; }
public SourceTypeCode sourcetype { get; set; }
public List1 Value { get; set; }
}
我想请您注意这一行:
public List1 Value { get; set; }
“List1”是一个枚举,定义如下:
public enum List1
{
[System.Xml.Serialization.XmlEnum("01")]
Item01,
[System.Xml.Serialization.XmlEnum("02")]
Item02, etc...
我的问题是,在反序列化期间,所有字段都正确反序列化,但枚举除外。
我尝试用 XmlEnum("NotificationType") 等装饰属性......什么都没有!
这是我的反序列化代码:
var p = new Product();
XmlSerializer pserializer = new XmlSerializer(p.GetType());
object pDeserialized = pserializer.Deserialize(reader);
p = (Product) pDeserialized;
这是这个元素在 XML 中的样子:
<NotificationType>03</NotificationType>
Product 对象在 C# 中的属性是:
public NotificationType NotificationType { get; set; }
如果我将其更改为:
public List1 NotificationType { get; set; }
反序列化正确显示“Item03”,这意味着它确实读取了 XML 中的任何内容。如果我像上面那样保留它,NotificationType 类的“Value”属性永远不会被填充,并且总是显示 Item01(Enum 的默认值)。
关于为什么这个 Value 属性适用于某些类型(字符串)但不适用于枚举,我已经用尽了关于 SO 和网络搜索的所有可能问题。我错过了什么吗?
对不起,很长的问题和代码。感谢任何人都可以在这个问题上阐明的任何观点。现在已经坚持了一整天了。