CollectionDataContract с дополнительным свойством

#c# #.net #wcf #xml-parsing

#c# #.net #wcf #синтаксический анализ xml

Вопрос:

Я работаю со списком в WCF. Я хочу передать список между клиентом и сервером с одним дополнительным свойством внутри него.

Необходимый вывод

 <NumbersList>
    <Count>2</Count> //Extra property to parse
    <Number>1</Number>
    <Number>2</Number>
</NumbersList>
  

Итак, я следую руководству по этой ссылке:http://www.borismod.net/2009/04/wcf-collectiondatacontract-and.html

И я написал приведенный ниже код для достижения этого.

 [MessageContract]
public class RequestResponse
{
    [MessageBodyMember(Name = "NumbersList")]
    public NumbersList NumbersList;
}

[DataContract]
public class NumbersList
{
    [DataMember]
    public int Count { get; set; }

    [DataMember]
    public Number Number { get; set; }
}

[CollectionDataContract(ItemName = "Number")]
public class Number : Collection<int>
{        
}
  

Итак, это дает мне вывод следующим образом:

 <NumbersList>
    <Count>2</Count>
    <Number>
        <Number>1</Number>
        <Number>2</Number>
    </Number>
</NumbersList>
  

Если я помещу Count свойство, украшенное DataMember , прямо внутри CollectionDataContract , однако WCF опустит это свойство.

Еще одна попытка:

 [MessageContract]
public class RequestResponse
{
    [MessageBodyMember(Name = "NumbersList")]
    public Number NumbersList;
}

[CollectionDataContract(ItemName = "Number")]
public class Number : Collection<int>
{
    [DataMember]
    public int Count { get; set; } // This will be omited...
}
  

Чем это может быть, дайте вывод следующим образом:

 <NumbersList>
    <Number>
        <Number>1</Number>
        <Number>2</Number>
    </Number>
</NumbersList>
  

Может ли кто-нибудь помочь мне получить вывод следующим образом:

Необходимый вывод

 <NumbersList>
    <Count>2</Count>
    <Number>1</Number>
    <Number>2</Number>
</NumbersList>
  

Комментарии:

1. Из того, что я знаю, это невозможно.

2. @selami, это может быть возможно, пожалуйста, смотрите мой ответ ниже.

Ответ №1:

После выполнения исследований и разработок и публикации моего запроса на asp.net форум Я получаю решение.

В моем случае CollectionDataContract мне это не помогло бы, для этого я должен использовать XmlSerializerFormat

Итак, я переписываю свой код следующим образом:

 [MessageContract]
public class Messanger
{
    [MessageBodyMember]
    [XmlElement(ElementName = "NumbersList")]
    public NumbersList NumbersList;
}

[DataContract]
[XmlRoot(ElementName = "NumbersList")]
public class NumbersList
{
    [XmlElement(ElementName = "Count")]
    public int Count { get; set; }

    [XmlElement(ElementName = "Number")]
    public List<int> Number { get; set; }
}
  

и это сгенерирует XML для меня следующим образом:

 <NumbersList>
    <Count>2</Count> //Extra property to parse
    <Number>1</Number>
    <Number>2</Number>
</NumbersList>
  

Вот ссылка на форум: https://social.msdn.microsoft.com/Forums/vstudio/en-US/12ceeae4-0284-4a3b-a913-e69811f41b81/collectiondatacontract-with-the-extra-property?форум=wcf