WCF DataMember List <> без включающего элемента - PullRequest
3 голосов
/ 16 июля 2010

Следующий DataContract:

    [DataContract(Namespace = "http://namespace", Name = "Blarg")]
    public class Blarg
    {
        [XmlAttribute("Attribute")]
        public string Attribute{ get; set; }

        [DataMember(Name = "Record", IsRequired = false, Order = 4)]
        public List<Record> Record{ get; set; }
    }

Сериализуется в это:

<Blarg Attribute="blah">
    <Record>
        <Record/>
        <Record/>
        <Record/>
    </Record>
</Blarg>

Но я хочу это:

<Blarg>
    <Record/>
    <Record/>
    <Record/>
<Blarg/>

Кажется, DataContractSerializer вставляетродительский заголовок автоматически, и я не хочу этого.

Как мне удалить обертку <Record>?

Ответы [ 2 ]

2 голосов
/ 17 июля 2010

Я не думаю, что вы можете сделать это.

DataContractSerializer оптимизирован для скорости, и в процессе он жертвует некоторой гибкостью и некоторыми функциями (такими как атрибуты XML).Я не думаю, что у вас есть много возможностей повлиять на DCS - он делает свою работу так, как считает нужным, и как можно быстрее.Вы можете достаточно точно определить что для сериализации (с атрибутом [DataMember], но у вас нет права сказать , как сериализировать.

Есливам нужно больше контроля, вместо этого вы можете выбрать XmlSerializer - в этом случае у вас есть сериализация на 10-15% медленнее, но вы можете контролировать такие вещи, как форма данных и т. д. Но даже в этом случае - я не знаюВ любом случае вы можете указать сериализатору XML сериализовать коллекцию в серию тегов XML без включающего тега для коллекции.

0 голосов
/ 08 августа 2017

Я нашел ответ здесь .См. Нижеприведенный рассказ (для длинного извлечения URL):

 [XmlElement ("Parameter")]
    public List<Parameter> Parameters;
...