У меня возникла проблема с использованием функции «Вставить XML как классы» в VS2012, чтобы должным образом десериализовать XML-результаты из вызова Rest с помощью Web API.Использование «Вставить XML как классы» для десериализации ответа на вызов Web API
Ответ XML от вызова выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SCResponse>
<AccountId>86</AccountId>
<Administrator>false</Administrator>
<Email>[email protected]</Email>
<FirstName>[email protected]</FirstName>
<Label>false</Label>
<LastName>[email protected]</LastName>
<link href="https://cnn.com" rel="news" title="News"/>
</SCResponse>
Я скопировал этот XML и использовал удобную новую функцию, чтобы вставить этот XML в качестве классов:
namespace Models.account.response
{
[XmlRoot(ElementName = "SCResponse")] // I added this so I could name the object Account
[DataContract(Name = "SCResponse", Namespace = "")] // I added this as the namespace was causing me problems
public partial class Account
{
public byte AccountId { get; set; }
public bool Administrator { get; set; }
public string Email { get; set; }
public string FirstName { get; set; }
public bool Label { get; set; }
public string LastName { get; set; }
[XmlElement("link")]
public SCResponseLink[] Link { get; set; }
}
[XmlType(AnonymousType = true)]
public partial class SCResponseLink
{
private string hrefField;
private string relField;
private string titleField;
[XmlAttribute)]
public string href { get; set; }
XmlAttribute]
public string rel { get; set; }
[XmlAttribute]
public string title { get; set; }
}
}
}
я называю конечную точку REST например:
string path = String.Format("account/{0}", id);
HttpResponseMessage response = client.GetAsync(path).Result; // Blocking call!
if (response.IsSuccessStatusCode)
{
// Parse the response body. Blocking!
account = response.Content.ReadAsAsync<Models.account.response.Account>().Result;
}
и изучить поля объекта «Учетная запись» - все имеют значение null или defaultin g до инициализированных значений.
В моем методе Global.asax.cs Application_Start, я регистрируя XML Serializer:
GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;
Вам нужны атрибуты [DataMember], добавленные к каждому свойству при использовании [DataContract] ... –