2016-10-20 5 views
0

Я пытаюсь решить головоломку с атрибутами xml. Проблема заключается в том, что у нас уже есть широко используемый файл с этой структурой, от которой я не могу отклонитьсяСоздание структуры XML с использованием атрибутов xml

<CONFIGS> 
    <CONFIG> 
    <NAME>c1</NAME> 
    <DB> 
     <VAL1>v1</VAL1> 
     <VAL2>v2</VAL2> 
     <VAL3>v3</VAL3> 
    </DB> 
    </CONFIG> 
    <CONFIG> 
    <NAME>c2</NAME> 
    <DB> 
     <VAL1>v1</VAL1> 
     <VAL2>v2</VAL2> 
     <VAL3>v3</VAL3> 
    </DB> 
    </CONFIG> 
</CONFIGS> 

Я создал этот C# код

// master class 
[XmlRoot(ElementName = "CONFIGS")] 
public class MyConfigs 
{ 

    [XmlArrayItem(ElementName = "CONFIG", Type = typeof(MyConfigSchema))] 
    public MyConfigSchema[] Schemas { get; set; } 
} 

// I should have array of these 
public class MyConfigSchema 
{ 

    [XmlElement(DataType = "string", ElementName = "NAME")] 
    public string Name { get; set; } 

    [XmlElement(ElementName = "DB", Type = typeof(Db))] 
    public Db Config { get; set; } 

    // this element is single and has subelements 
    public class Db 
    { 

     [XmlElement(DataType = "string", ElementName = "VAL1")] 
     public string Val1 { get; set; } 

     [XmlElement(DataType = "int", ElementName = "VAL2")] 
     public int Val2 { get; set; } 

     [XmlElement(DataType = "string", ElementName = "VAL3")] 
     public string Val3 { get; set; } 

    } 
} 

// Writing 
using (var writer = new FileStream(testfile, FileMode.Create)) 
     { 
      var ser = new XmlSerializer(typeof(MyConfigs)); 
      ser.Serialize(writer, confFileObj); 
      writer.Close(); 
     } 

Вот моя проблема - это пишет следующий результат, который почти то, что мне нужно, но там он пишет <Schemas>. . . </Schemas>, которого я не могу.

<CONFIGS> --<Schemas>-- <CONFIG> <NAME>c1</NAME> <DB> <VAL1>v1</VAL1> <VAL2>v2</VAL2> <VAL3>v3</VAL3> </DB> </CONFIG> <CONFIG> <NAME>c2</NAME> <DB> <VAL1>v1</VAL1> <VAL2>v2</VAL2> <VAL3>v3</VAL3> </DB> </CONFIG> --</Schemas>-- </CONFIGS>

Есть ли способ избавиться от <Schemas>. . . </Schemas>?

ответ

1

Похоже, я только что решил. Я никогда раньше этого не видел, смотрел MSDN, поэтому я не пробовал. Но я попытался вместо этого

[XmlArrayItem(ElementName = "CONFIG", Type = typeof(MyConfigSchema))] 
public MyConfigSchema[] Schemas { get; set; } 

сделать это

[XmlElement(ElementName = "CONFIG", Type = typeof(MyConfigSchema))] 
public MyConfigSchema[] Schemas { get; set; } 

Вместо XmlArrayItem я поставил XmlElement и он работал. Я не знал, что можно отметить список или массив с атрибутом простого элемента.