Что использовать вместо DataMember (EmitDefaultValue = false) в. Net Core 3.1? - PullRequest
0 голосов
/ 25 марта 2020

Я пишу. NET Core 3.1 Client для службы WCF. Я сгенерировал клиента с помощью svcutil. Все члены в reference.cs имеют следующий атрибут:

[System.Xml.Serialization.XmlElementAttribute("property.name", IsNullable = true, Order = 0)]

Некоторые элементы не должны быть сериализованы в сообщении, когда они имеют нулевое значение, т. Е .: в настоящее время включены все элементы:

<criteria>
  <criteria1 xsi:nil="true"/>
  <criteria2>1</criteria2>
  <criteria3 xsi:nil="true"/>
</criteria>

Желаемый результат:

<criteria>
  <criteria2>1</criteria2>
</criteria>

In. Net Framework Мне удалось добавить атрибут [DataMember (EmitDefaultValue = false)], чтобы получить правильное поведение, это не поддерживается в. NET ядро.

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Я нашел решение, проблема существует при использовании System. Xml .Serialization.XmlElementAttribute, она не работает в сочетании с DataMember. Решение о том, чтобы не сериализовать пустые значения с помощью XmlElementAttribute, находится здесь: Подавлять нулевые типы значений от испускания XmlSerializer

0 голосов
/ 26 марта 2020

Насколько я знаю, EmitDefaultValue поддерживается в Do tNet Core.
https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.datamemberattribute.emitdefaultvalue?view=netframework-4.8
мы можем декорировать элемент данных этим атрибутом в контракте данных, расположенном в файле Reference.cs.

   [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue =false)]
    public int Id
    {
        get
        {
            return this.IdField;
        }
        set
        {
            this.IdField = value;
        }
    }

Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...