Предполагая, что мы используем службу REST WCF, возвращающую xml.WCF -Rest- DataContract: Deserialize XML wrapped response
Можно ли десериализовать «автоматически» обработанный xml ответ на DataContract?
Простой пример
Класс:
[DataContract]
public class TestClass
{
[DataMember]
string StringValue { get; set; }
[DataMember]
int IntValue { get; set; }
}
Услуги:
[OperationContract]
[WebGet(UriTemplate = "Test",
BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml)]
TestClass Test();
Клиент:
using (WebClient webClient = new WebClient())
{
webClient.Headers["Content-type"] = "application/xml";
webClient.Encoding = Encoding.UTF8;
return webClient.DownloadString($"{BASE_URL}/Test");
}
Deserializa :
// With T as TestClass in or example.
public static T Deserialize<T>(string xml)
{
using (Stream stream = new MemoryStream())
{
byte[] data = System.Text.Encoding.UTF8.GetBytes(xml);
stream.Write(data, 0, data.Length);
stream.Position = 0;
DataContractSerializer deserializer =
new DataContractSerializer(typeof(T));
return (T)deserializer.ReadObject(stream);
}
}
Этот код хорошо подходит для получения открытого ответа.
Поскольку webClient просто возвращает полный запрос, выходной файл xml содержит элемент оболочки thre, а DataContractSerializer попытается разобрать простую строку и не теперь это происходит из завершенного ответа WCF (и должен «забыть» обертку).
Цель состоит в том, чтобы создать клиента, где стиль упаковки (голый/завернутый) не имеет значения.
Извините, но это та же самая проблема с моей главной цели: работа с завернутым и голосом. – Manea
дорогой @Manea. пожалуйста, напишите весь ответ, чтобы я мог вам помочь. Благодарю. – David
Пожалуйста, посмотрите ** сервис ** в моем примере: когда он установлен в BodyStyle = WebMessageBodyStyle.Wrapped, возвращаемый xml «завернут», и поэтому десериализация не работает. Я ищу метод десериализации Xml, сгенерированного WCF, и этот метод должен работать для WebMessageBodyStyle.Wrapped AND WebMessageBodyStyle.Bare. – Manea