Потоковая передача XML C# и потеря контроля над именами узлов в определенных случаяхC#

Место общения программистов C#
Ответить
Anonymous
 Потоковая передача XML C# и потеря контроля над именами узлов в определенных случаях

Сообщение Anonymous »

Потоковая передача списка проста и обеспечивает полный контроль над именами узлов XML.
Но в некоторых случаях этот контроль недоступен. Вот три примера.
Случаи A и B — это то, что обычно работает (но я не хочу их использовать).
Случай C также работает, но с потерей контроля над XML. имена узлов. (И я хочу использовать это с контролем над именами узлов).
Примечание. Проблему в C можно избежать, реализовав IXmlSerializable, но это много дополнительной работы для решения небольшой проблемы.
Например A:

Код: Выделить всё

[XmlRoot(ElementName = "root")]
public class MyClass
{
[XmlArray("my_names_list"), XmlArrayItem(typeof(string), ElementName = "my_name")]
public List MyNames { get; set; } = new List();
}
В качестве возможного результата можно использовать этот XML.

Код: Выделить всё


first value
second value


или Б

Код: Выделить всё

[XmlRoot(ElementName = "root")]
public class MyClass
{
[XmlElement(ElementName = "my_name")]
public List MyNames { get; set; } = new List();
}
с этим XML

Код: Выделить всё

first value
second value

Но у меня возникла проблема (по контролю над именами узлов элементов списка) в следующем случае C. Как задать имя узла элементов списка?

Код: Выделить всё

[XmlRoot(ElementName = "root")]
public class MyClass : List { }
Это приведет только к следующему результату, независимо от того, какие теги вы используете.

Код: Выделить всё

first value
second value

В примерах кода A и B есть элемент, представляющий собой список, который я не хочу использовать.
Для потоковой передачи я предпочитаю A в большинстве случаев, а B это то, что я иногда предпочитаю.
В примере кода C нет члена класса для списка, класс наследуется от списка, и это то, что я хочу использовать.
В этом примере строка в List не представляет собой такой уж большой проблемы. Но List раздражает больше, или мне придется пойти на уступки в своем стиле кодирования, или мне придется принять результаты потоковой передачи XML. Или я могу попытаться найти способ контролировать/направлять синтаксический анализатор XML в С#. (Я знаю, что могу сделать это с помощью IXmlSerializable, но для одного изменения имени требуется много дополнительной работы.)
Для потоковой передачи C я потерял контроль над именем узла элемента списка. . Что бы я ни пытался изменить, компилятор ничего из этого не принимает.
Как я могу использовать код из примера C и получить результаты потоковой передачи из примера B без использования IXmlSerializable ?
Любые советы приветствуются.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ific-cases
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»