Представлять XML без xsd - PullRequest
       22

Представлять XML без xsd

0 голосов
/ 02 февраля 2010

Примечание: я не могу использовать 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()
    {

    }
}

Я знаю, что мне не хватает чего-то, чтобы сохранить значение, и, возможно,

Ответы [ 3 ]

2 голосов
/ 02 февраля 2010

Запуск xsd.exe дважды в вашем XML для создания промежуточного 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;
        }
    }
}

Это работает для вас ??

0 голосов
/ 02 февраля 2010

Я думаю, вам нужно использовать атрибут [XmlText]:

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

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

    public Attribute()
    {

    }
}
0 голосов
/ 02 февраля 2010

XML, который вы пытаетесь создать, не похож на тот тип, который XmlSerializer способен создать изначально . Я думаю, вам придется реализовать IXmlSerializable и написать его на заказ.

...