Сериализация класса с использованием XMLSerializer без отображения полей C#

У меня есть класс с двумя свойствами (которые генерируются из XSD с помощью xsd.exe) и заполняя их и пытаясь сериализовать их в XML с приведенным ниже кодом.

Я могу получить XML с элементами в нем, но без полей / элементов, которые я назначил

OrganizationDetail objOrgDet = new OrganizationDetail();
objOrg.IsDataLimitedSet =true;

Organization objOrg = new Organization();
objOrg.Orgainzation_Detail = objOrgDet;

XmlSerializer serailizer = new XmlSerializer(typeof(Organization));
StringWriter strwritter = new StringWriter();

serailizer.Serialize(strwritter, objOrg);
string xml = strwritter.ToString();

И полученный XML

<?xml version="1.0" encoding="utf-16"?>
<Organization xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Organization_DETAIL xmlns="http://www.mismo.org/residential/2009/schemas" />
</Organization>

Это не поле, которое я установил.

2 ответа

Как обсуждалось в комментариях, когда у нас есть minOccurs=0 для элементов мы получаем аннотацию System.Xml.Serialization.XmlIgnoreAttribute() из-за чего даже после заполнения сущности мы не можем видеть свойство

Решение: Поля, имеющие атрибут minOccurs=0, при запуске xsd.exe для каждого элемента в классе создаются два свойства, одно - это свойство, а другое - значение bool для свойства с суффиксом "Указано".

Таким образом, чтобы значения появлялись в xml во время сериализации, нам нужно включить свойство Specified этого элемента

например: как у меня есть собственность IsDataLimitedSet есть еще одно свойство с именем IsDataLimitedSetSpecified генерируется в классе, поэтому нам нужно установить его в true

OrganizationDetail objOrgDet = new OrganizationDetail();
objOrg.IsDataLimitedSetSpecified =true;
objOrg.IsDataLimitedSet =true;

Вам необходимо заполнить поля данными. Сериализатор игнорирует все поля, которые не заполнены.

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