2008-12-19 5 views

Antwort

17

Nun, könnten Sie vielleicht eine ShouldSerializeFoo() Methode hinzufügen:

using System; 
using System.ComponentModel; 
using System.Xml.Serialization; 
[Serializable] 
public class MyEntity 
{ 
    public string Key { get; set; } 

    public string[] Items { get; set; } 

    [EditorBrowsable(EditorBrowsableState.Never), Browsable(false)] 
    public bool ShouldSerializeItems() 
    { 
     return Items != null && Items.Length > 0; 
    } 
} 

static class Program 
{ 
    static void Main() 
    { 
     MyEntity obj = new MyEntity { Key = "abc", Items = new string[0] }; 
     XmlSerializer ser = new XmlSerializer(typeof(MyEntity)); 
     ser.Serialize(Console.Out, obj); 
    } 
} 

Die ShouldSerialize{name} patten erkannt werden, und die Methode aufgerufen wird, um zu sehen, ob die Eigenschaft in der Serialisierung aufzunehmen. Es gibt auch ein alternatives {name}Specified Muster, mit dem Sie auch Dinge beim Deserialisieren (über den Setter) erkennen können:

[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)] 
[XmlIgnore] 
public bool ItemsSpecified 
{ 
    get { return Items != null && Items.Length > 0; } 
    set { } // could set the default array here if we want 
} 
Verwandte Themen