Управляйте форматом XML-сериализации с помощью определенного метода - PullRequest
3 голосов
/ 13 сентября 2011

У меня есть DateTime и подкласс, который я хочу отформатировать специально для сериализации XML. Обычно, без указания чего-либо, сериализация DateTime будет просто следовать текущей культуре, но я хочу, чтобы DateTime форматировался определенным образом (даже если не десериализуемо), то же самое относится к подклассу.

Итак, учитывая эти классы:

public class MyClass
{
    public DateTime MyDateTime { get; set; }
    public MySubClass TheSubClass { get; set; }
}

public class MySubClass 
{
    public int ID { get; set; }
    public string Name { get; set; }
}

Как указать методы сериализации, которые будут выводить:

<MyClass>
  <MyDateTime>2011-9-13T10:30:00Z</MyDateTime>
  <MySubClass>ID-Name</MySubClass>
</MyClass>

Ответы [ 2 ]

2 голосов
/ 13 сентября 2011

Это не в моей голове ... Я не вложил тип в сериализацию Xml, как вы, - но это должно быть близко.

[XmlRoot]
public class MyClass
{
    [XmlElement]
    public DateTime MyDateTime { get; set; }
    [XmlElement]
    public MySubClass TheSubClass { get; set; }
}

[XmlRoot]
public class MySubClass 
{
    [XmlElement]
    public int ID { get; set; }
    [XmlIgnore]  // since you didn't include in XML snippet
    public string Name { get; set; }
}

Если вы выполняете простую сериализацию XML: проверьте MSDN XmlSerializer .

Обновление

Я пропустил Я хочу, чтобы DateTime форматировался определенным образом ... что я сделал, а не реализовал IXmlSerializable:

[XmlRoot]
public class MyClass
{
    [XmlElement]
    public string MyDateTime { get; set; }
    [XmlIgnore]
    public DateTime DT
    {
        get { /* return DateTime from MyDateTime */ }
        set { MyDateTime = value.ToString( /* use formatting */); } // ex. ToString("yyyy, MMMM dd : hh:mm")
    }
    [XmlElement]
    public MySubClass TheSubClass { get; set; }
}
2 голосов
/ 13 сентября 2011

Используете ли вы XmlSerializer?Если это так, вам не нужно включать атрибуты [Serializable], они игнорируются XmlSerializer.Вы можете настроить сериализацию, реализовав интерфейс IXmlSerializable для вашего типа.

http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

...