.Net Perfect Dev Ответов: 1

Сериализация свойства с помощью атрибута system.componentmodel.defaultvalueattribute


Привет,

Я пытаюсь сериализовать Объект n в xml-файл.этот объект содержит свойство length

[System.Xml.Serialization.XmlAttributeAttribute()]  
        [System.ComponentModel.DefaultValueAttribute(1D)]  
        public double Length  
        {  
            get  
            {  
                return this.lengthField;  
            }  
            set  
            {  
                this.lengthField = value;  
            }  
        } 


Когда я даю значение 1 этому свойству, оно не отображается. Несмотря на то что когда я попытался повлиять на значение 1.65 или 1.75 оно появилось

Как можно исправить эту проблему, чтобы отобразить длину=1 ?

Что я уже пробовал:

<Person Attribute1="Name" Attribute2="LastName" Attribute3="Age" Attribute4="Price">    
<Person1 Attribute1Person1="NamePerson" Attribute2Person1="LastNamePerson" />    
<Person2 Attribute1Person2="NamePerson" Attribute2Person2="LastNamePerson" />    
<Person3 Attribute1Person3="NamePerson" Attribute2Person3="LastNamePerson" />    
<Person4 Attribute1Person4="NamePerson" Attribute2Person4="LastNamePerson" />    
</Person>    
<Man Attribute1="Name" Attribute2="LastName" Attribute3="Age" Attribute4="Price" length="1.75">    
<Man1 Attribute1Person1="NameMan" Attribute2Person1="LastNameMan" length="1.65" />    
<Man2 Attribute1Person2="NameMan" Attribute2Person2="LastNameMan" />    
<Man3 Attribute1Person3="NameMan" Attribute2Person3="LastNameMan" length="1.55" />    
<Man4 Attribute1Person4="NameMan" Attribute2Person4="LastNameMan"  />    
</Man>    
<Women Attribute1="Name" Attribute2="LastName" Attribute3="Age" Attribute4="Price">    
<Women1 Attribute1Person1="NameWomen" Attribute2Person1="LastNameWomen" />    
<Women2 Attribute1Person2="NameWomen" Attribute2Person2="LastNameWomen" />    
<Women3 Attribute1Person3="NameWomen" Attribute2Person3="LastNameWomen" />    
<Women4 Attribute1Person4="NameWomen" Attribute2Person4="LastNameWomen" />    
</Women> 

Gerry Schmitz

Попробуйте 1.0

1 Ответов

Рейтинг:
2

Richard Deeming

Либо удалить DefaultValue атрибут или переопределение значения по умолчанию при сериализации в XML:
XmlAttributes.Собственность XmlDefaultValue (Системы.В формате XML.Сериализация) | Майкрософт Документы[^]

public XmlSerializer CreateSerializer()
{
    var attributeOverrides = new XmlAttributeOverrides();
    attributeOverrides.Add(typeof(Person), nameof(Person.Length), new XmlAttributes
    {
        XmlDefaultValue = double.NaN,
        XmlAttribute = new XmlAttributeAttribute(),
    });
    
    return new XmlSerializer(typeof(Person), attributeOverrides);
}
NB: При переопределении атрибутов сериализации для свойства необходимо выполнить повторное задание все атрибуты сериализации, именно поэтому вам необходимо предоставить XmlAttribute собственность, а также XmlDefaultValue собственность.