2010-02-02 2 views
0

Примечание: Я не могу использовать XSD ... не собираюсь вникать в почему.Представить XML без 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() 
    { 

    } 
} 

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

ответ

2

Запуск 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

Да, вы бог. –

0

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

0

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

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

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

    public Attribute() 
    { 

    } 
} 
+0

Пробовал, не кубики. Я получаю сообщение об ошибке «Ошибка, отражающая тип» –

Смежные вопросы