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で2回実行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 に答える