Сериализация класса с использованием 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;
Вам необходимо заполнить поля данными. Сериализатор игнорирует все поля, которые не заполнены.