Как получить DataMemberAttribute с использованием логического типа
У меня есть простое тестовое приложение, которое извлекает документ XML из интерфейса отдыха. Элемент данных имеет пару строковых полей и пару логических полей. Я создаю простой класс сущностей и помещаю в него DataContractAttribute, а затем добавляю DataMemberAttributes к каждому элементу данных. Затем я использую HttpResponseMessage.Content.ReadAsDataContract() для анализа ответа. Все строковые типы проходят нормально, но все мои логические типы ложные (и на самом деле они не ложные). Элемент xml выглядит примерно так:
<is-enabled type="boolean">true</is-enabled>
а затем в моем классе типа у меня есть что-то вроде:
[DataMember(Name="is-enabled")]
public bool isEnabled
{
get
{
return this.isEnabledField;
}
set
{
this.isEnabledField = value;
}
}
Как получить логические значения для правильного прохождения?
2 ответа
Хотите верьте, хотите нет, но DataContractSerializer чувствителен к порядку элементов десериализации XML-документа. Могу поспорить, что вам нужно установить свойство Order объекта DataMemberAttribute, чтобы оно совпадало с фактической позицией "включено" среди других дочерних элементов его родительского элемента.
Кажется, что это должно работать, но... первое, что я бы попробовал, это удалить тире "-" из имени члена данных. Возможно, что (de) сериализатор душит черту изнутри и не отображает правильный элемент, и поэтому дает по умолчанию значение bool false;
Если вы чувствуете необходимость сделать имя составной переменной более читабельным, попробуйте подчеркнуть подчеркивание.