#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