Я пытаюсь десериализовать поток XML в объект.Он отлично работает для всех, кроме одного поля, и я не могу понять, что не так с этим полем.Чтобы убедиться, что я знаю, с чем имею дело, я непосредственно закодировал строку XML.
[DataContract(Name = "auth")]
public class Authorization
{
[DataMember(Name = "status")]
public string Status { get; set; }
[DataMember(Name = "user_name")]
public string UserName { get; set; }
[DataMember(Name = "person_pk")]
public string PersonID { get; set; }
}
StringBuilder sb = new StringBuilder();
sb.Append("<auth xmlns=\"http://schemas.datacontract.org/2004/07/Veracross\">");
sb.Append("<status>success</status>");
sb.Append("<person_pk>2516</person_pk>");
sb.Append("<user_name>scohen</user_name>");
sb.Append("</auth>");
string fixedXMLData = sb.ToString();
DataContractSerializer serializer = new DataContractSerializer(typeof(Authorization));
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(fixedXMLData));
Authorization Auth = (Authorization)serializer.ReadObject(stream);
Когда я проверяю объект Auth после выполнения, я обнаруживаю, что Status и UserName заполнены правильно.PersonID является нулем.Я попытался изменить имена полей в строке XML, изменить порядок полей, изменить содержимое поля person_pk и т. Д. Ничто не заставляет его работать.
Теперь вот где это становится странным - если я изменяю "person_pk"чтобы" проверить "везде, он работает нормально, и я получаю правильное значение для PersonID.Однако, если я поменяю "person_pk" на "person" или "pk", он все равно не будет работать?На самом деле, я получаю эту XML-строку из службы RESTful и не могу управлять именами полей.Поле называется "person_pk", я просто не могу понять, почему оно не будет правильно десериализовано.
Есть идеи?
Спасибо
РЕШЕНИЕ: Я обновилмои атрибуты DataMember для включения атрибута Order:
[DataContract(Name = "auth")]
public class Authorization
{
[DataMember(Name = "status", Order=0)]
public string Status { get; set; }
[DataMember(Name = "person_pk", Order=1)]
public string PersonID { get; set; }
[DataMember(Name = "user_name", Order=2)]
public string UserName { get; set; }
}