2016-12-22 2 views
0

のXmlSerializerがクラス属性を無視属性を無視します。私は、単純なシリアライザを書いている、と私はまた、私は[XmlRoot][XmlIgnore]を使用しようとしました、[Serializable][NonSerialized]属性を使用していました。フィールドは、それがシリアライズされる属性[NonSerialized]を有しているが、私は、気づきました。のXmlSerializerは

そしてそれはまた、このような[XmAtribute]などの他の属性を無視します。次に、どのように私はいくつかのフィールドを無視することができ、私はそれが任意の属性を使用する必要もないということに気づいた、と私は、これらの属性なしでクラスをシリアル化することができますか?

私のクラス:

[Serializable] 
public class Route 
{ 
    int busNumber; 
    string busType, destination; 
    DateTime departure, arrival; 
    [NonSerialized]DateTime creationDate; 
    ... 
} 

そして、私はシリアライザをオーバーライドしてみList<Route>

private void saveToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    Stream stream = File.OpenWrite(Environment.CurrentDirectory + "\\routes.xml"); 
    XmlSerializer xmlSer = new XmlSerializer(typeof(List<Route>)); 
    xmlSer.Serialize(stream, ((FileForm)ActiveMdiChild).routes); 
    stream.Close(); 
} 
+0

チェックこの単純なネットフィドル:https://dotnetfiddle.net/ljPoyJ – Piou

答えて

0

をシリアル化しようとしている:

// Return an XmlSerializer used for overriding. 
    public XmlSerializer CreateOverrider() 
    { 
     // Create the XmlAttributeOverrides and XmlAttributes objects. 
     XmlAttributeOverrides xOver = new XmlAttributeOverrides(); 
     XmlAttributes attrs = new XmlAttributes(); 

     /* Setting XmlIgnore to false overrides the XmlIgnoreAttribute 
     applied to the Comment field. Thus it will be serialized.*/ 
     attrs.XmlIgnore = false; 
     xOver.Add(typeof(Group), "Comment", attrs); 

     /* Use the XmlIgnore to instruct the XmlSerializer to ignore 
     the GroupName instead. */ 
     attrs = new XmlAttributes(); 
     attrs.XmlIgnore = true; 
     xOver.Add(typeof(Group), "GroupName", attrs); 

     XmlSerializer xSer = new XmlSerializer(typeof(Group), xOver); 
     return xSer; 
    } 

    public void SerializeObject(string filename) 
    { 
     // Create an XmlSerializer instance. 
     XmlSerializer xSer = CreateOverrider(); 

     // Create the object to serialize and set its properties. 
     Group myGroup = new Group(); 
     myGroup.GroupName = ".NET"; 
     myGroup.Comment = "My Comment..."; 

     // Writing the file requires a TextWriter. 
     TextWriter writer = new StreamWriter(filename); 

     // Serialize the object and close the TextWriter. 
     xSer.Serialize(writer, myGroup); 
     writer.Close(); 
    } 

https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlignore.aspx

2

を確認してください。また、シリアル化する必要があるプロパティは、publicと宣言する必要があります。

使用法は次のように:

public class Route 
{ 
    public int busNumber; 
    public string busType, destination; 
    public DateTime departure, arrival; 
    [XmlIgnore] 
    public DateTime creationDate; 

    // how to ignore a property 
    private int ignored; 
    [XmlIgnore] 
    public int Ignored { get { return ignored; } set { ignored = value; } } 
} 
+0

OFK、はい、私は私は、XML固有のatributesを使用しようとしましたwroute、そして私が持っているようにGET /プロパティを設定します。それはちょうどどんな貢献も無視します。 – Cheephs

+0

すべてのプロパティを 'public'と宣言していますか?私は 'XmlSerializer'がそれらを書き出すためにこれが必要であることを確認しました。 'XmlIgnore'属性は、直列化したくない' public'プロパティに追加されています。 – dana

+1

はい、ありがとうございます、今は動作します。 – Cheephs

関連する問題