从XSD生成的类不适用于XmlSerializer

时间:2014-07-09 08:31:36

标签: c# xml xsd onix

我需要阅读一些遵循ONIX标准的XML文件 请参阅:http://www.editeur.org/93/Release-3.0-Downloads/

要做到这一点,我下载了ONIX 3.0 XSD: http://www.editeur.org/files/ONIX%203/ONIX_BookProduct_XSD_schema+codes_Issue_25.zip

使用下载的XSD和此命令“xsd your.xsd / classes”我创建了我想要使用的类。

尝试创建一个新的Xml Serializer时:

var xmls = new XmlSerializer(typeof(Model.ONIX.editeur.ONIXMessage));

我得到和例外

  

“反映出类型为'Model.ONIX.editeur.ONIXMessage'的错误。”

当我深入了解内部异常时,我最终会收到此消息:

  

“{”成员'文字'无法使用XmlText属性进行编码。您   可以使用XmlText属性来编码基元,枚举,   字符串数组或XmlNode数组。“}”

我不知道该怎么办,XSD出了什么问题?有什么建议吗?!

修改

public static List<Model.ONIX.editeur.Product> GetProductsDataFromOnixFile(string onixFileLocation)
    {
        var xmls = new XmlSerializer(typeof(Model.ONIX.editeur.ONIXMessageRefname));

        using (var reader = XmlReader.Create(onixFileLocation))
        {
            if (xmls.CanDeserialize(reader))
            {
                var onixMessage = (Model.ONIX.editeur.ONIXMessage)xmls.Deserialize(reader);
                return onixMessage.Items.OfType<Model.ONIX.editeur.Product>().ToList();
            }

            throw new Exception(string.Format("Cant read the file {0} as Onix", onixFileLocation));
        }
    }

1 个答案:

答案 0 :(得分:1)

我知道这个问题很旧,但是我想其他人会遇到特定的Onix问题。

这就是我的工作方式。

在参考xsd中,顶部有两个。在这里,我将其他两个文件复制/粘贴到其中。

<xs:include schemaLocation="ONIX_BookProduct_CodeLists.xsd" />
<xs:include schemaLocation="ONIX_XHTML_Subset.xsd" />

即这些行将在文件中替换为相应的文件。

然后我做了

xsd ONIX_BookProduct_3.0_reference.xsd /classes

然后生成.cs文件。我在这里唯一的问题是我必须从所有字段中删除一个文本属性,例如List147,但不是来自字符串的字段。例如。我必须从生成的代码中删除该属性,如下所示:

/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public List121 textscript {
    get {
        return this.textscriptField;

但不是来自这样的属性

/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public string Value {
    get {
        return this.valueField;