XML-формат .NET XmlSerializer

Есть ли способ заставить XmlSerializer сериализовать свойства объекта как атрибуты, а не как элементы?

например: Person.Phone="1 800 ПОЗВОНИТЕ МНЕ"

станет:

[Person Phone="1 800 ПОЗВОНИТЕ МНЕ" /]

вместо:

[Человек][Телефон]1 800 ПОЗВОНИТЕ МНЕ[/Телефон][/Человек]


person vlscanner    schedule 16.06.2011    source источник
comment
Реализуя IXmlSerializable, вы можете точно контролировать сериализацию объекта.   -  person Magnus    schedule 16.06.2011
comment
@Magnus, обычно это плохой способ сделать это; очень сложно сделать жестко...   -  person Marc Gravell    schedule 16.06.2011


Ответы (3)


Конечно...

public class Person
{
    [XmlAttribute]
    public string Phone {get;set;}
}

Вы также можете изменить имя/пространство имен и т. д., просмотрев параметры атрибута.

person Marc Gravell    schedule 16.06.2011
comment
Спасибо. Я считаю, что это был первый ответ, в котором рекомендуется использовать XmlAttribute. Не уверен, большинство ответов показывают 2 часа назад, но самая старая вкладка ставит этот ответ на первое место. - person vlscanner; 16.06.2011

Вы можете сделать так

[Serializable]
public class Person
{         
      [XmlAttribute()]
      public string Phone { get; set;}

      Or

      [XmlAttribute("Phone")]
      public string Phone123 { get;set;}
}
person Mangesh Pimpalkar    schedule 16.06.2011
comment
XmlSerializer не проверяет (и не требует) [Serializable] - person Marc Gravell; 16.06.2011

Используйте атрибут XmlAttribute.

person heisenberg    schedule 16.06.2011