stackoverflow.com/questions/2006482/...

аюсь получить этот результат при сериализации XML

<Test>
  <Category>
    <FileName>C:\test.txt</FileName>
    <!-- Note that here this is an array of a simple class with two fields 
         without root -->
    <Prop1>1</Prop1>
    <Prop2>2</Prop2>

    <Prop1>4</Prop1>
    <Prop2>5</Prop2>
    <!-- End array -->
  </Category>
</Test>

Я уже пробую разные вещи, как это

[Serializable]
[XmlRoot("Test")]
public class Test
{
    [XmlElement("Category")]
    public List<Category> Category= new List<Category>();
}

[Serializable]
[XmlRoot("Category")]
public class Category
{
    [XmlElement("FileName")]
    public string FileName { get; set; }

    [XmlElement("Property")]
    public List<Property> Properties = new List<Property>();
}

[Serializable]
public class Property
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}

Но я все еще получаю этот вывод:

<Test>
  <Category>
    <FileName>C:\test.txt</FileName>
    <Property>
      <Prop1>1</Prop1>
      <Prop2>2</Prop2>
    </Property>
    <Property>
      <Prop1>4</Prop1>
      <Prop2>5</Prop2>
    </Property>
  </Category>
</Test>

Как я могу удалить тег свойства ?? Заранее большое спасибо

 Khoumbe24 янв. 2011 г., 19:23
Прежде всего, спасибо Yads за ваш ответ. Я получил этот файл из внешнего источника и согласен с вами, что это не очень хороший XML-файл, но, как вы можете себе представить, мы уже просим редактора неисправного источника исправить их вывод ...
 Darin Dimitrov23 янв. 2011 г., 16:13
XML, который вы пытаетесь получить, кажется мне довольно двусмысленным. Наличие двух дочерних узлов с одинаковыми именами на одном уровне выглядит неправильно.

Ответы на вопрос(1)

если вам действительно нужен точный вывод, как указано выше, вы можете использовать обходной путь, как это:

[Serializable]
public partial class Test {
    public List<Category> Category;
}

[Serializable]
public partial class Category {
    [XmlElement("FileName")]
    public string FileName;

    [XmlElement("Prop1")]
    [XmlElement("Prop2")]
    [XmlChoiceIdentifier("propName")]
    public string[] Properties;

    [XmlIgnore]
    public PropName[] propName;
}

public enum PropName {
    Prop1,
    Prop2,
}
 Khoumbe24 янв. 2011 г., 20:48
Андрей. Я хочу поблагодарить вас за этот обходной путь. Я реализую его, и он делает то, что я знаю, что это не чистое решение, но я буду использовать время, чтобы редактор Xml Source исправил их вывод.

Ваш ответ на вопрос