0

注意:我不能使用 XSD... 不打算说明原因。

我在一个应该反序列化的类中正确表示以下 xml 时遇到问题:

XML:

<product>
   <sku>oursku</sku>
   <attribute name="attrib1">value1</attribute>
   <attribute name="attrib2">value2</attribute>
   <attribute name="attribx">valuex</attribute>
</product>

问题是表示属性节点

到目前为止,我所拥有的是:

[XmlElement(ElementName = "Attribute")]
public Attribute[] productAttributes;

public class Attribute
{
    [XmlAttribute(AttributeName = "Name")]
    public string attributeName;

    public Attribute()
    {

    }
}

我知道我缺少一些东西来存储价值,也许

4

3 回答 3

2

在您的 XML 上运行xsd.exe两次以创建中间 XSD,然后从中创建 C# 类会产生以下结果:

[Serializable]
[XmlType(AnonymousType=true)]
[XmlRoot(Namespace="", IsNullable=false)]
public partial class product 
{
    private string skuField;
    private productAttribute[] attributeField;

    [XmlElement(Form=XmlSchemaForm.Unqualified)]
    public string sku {
        get {
            return this.skuField;
        }
        set {
            this.skuField = value;
        }
    }

    [XmlElement("attribute", Form=XmlSchemaForm.Unqualified, IsNullable=true)]
    public productAttribute[] attribute {
        get {
            return this.attributeField;
        }
        set {
            this.attributeField = value;
        }
    }
}

[Serializable]
[XmlType(AnonymousType=true)]
public partial class productAttribute {

    private string nameField;
    private string valueField;

    [XmlAttribute]
    public string name {
        get {
            return this.nameField;
        }
        set {
            this.nameField = value;
        }
    }

    [XmlText]
    public string Value {
        get {
            return this.valueField;
        }
        set {
            this.valueField = value;
        }
    }
}

那对你有用吗??

于 2010-02-02T15:43:55.687 回答
0

您尝试生成的 XML 看起来不像 XmlSerializer 能够本地创建的那种。我认为您将不得不实现 IXmlSerializable 并自定义编写它。

于 2010-02-02T14:57:39.523 回答
0

我认为您需要使用该属性[XmlText]

public class Attribute
{
    [XmlAttribute(AttributeName = "Name")]
    public string attributeName;

    [XmlText]
    public string Value {get;set;}

    public Attribute()
    {

    }
}
于 2010-02-02T15:01:18.553 回答