Как получить 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;

Если вы чувствуете необходимость сделать имя составной переменной более читабельным, попробуйте подчеркнуть подчеркивание.

Другие вопросы по тегам