C# XmlSerializer忽略属性

C# XmlSerializer忽略属性,c#,serialization,xml-serialization,C#,Serialization,Xml Serialization,XmlSerializer忽略类属性。我正在编写简单的序列化程序,我使用了[Serializable]和[NonSerialized]属性,还尝试使用[XmlRoot]和[XmlIgnore]。我注意到,虽然字段具有属性[NonSerialized],但它是序列化的 它还忽略了其他属性,如[XmAtribute]。然后我注意到甚至不需要使用任何属性,我可以序列化没有这些属性的类,我怎么可以忽略一些字段呢 我的班级: [Serializable] public class Route {

XmlSerializer忽略类属性。我正在编写简单的序列化程序,我使用了
[Serializable]
[NonSerialized]
属性,还尝试使用
[XmlRoot]
[XmlIgnore]
。我注意到,虽然字段具有属性
[NonSerialized]
,但它是序列化的

它还忽略了其他属性,如
[XmAtribute]
。然后我注意到甚至不需要使用任何属性,我可以序列化没有这些属性的类,我怎么可以忽略一些字段呢

我的班级:

[Serializable]
public class Route
{
    int busNumber;
    string busType, destination;
    DateTime departure, arrival;
    [NonSerialized]DateTime creationDate;
    ...
}
我正在尝试序列化
列表

private void saveToolStripMenuItem\u单击(对象发送方,事件参数e)
{
Stream-Stream=File.OpenWrite(Environment.CurrentDirectory+“\\routes.xml”);
XmlSerializer xmlSer=新的XmlSerializer(typeof(List));
序列化(流,((文件格式)ActiveMdiChild.routes);
stream.Close();
}

尝试覆盖序列化程序:

// 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();
   }

您使用了错误的属性。因为您使用的是XmlSerializer,所以应该使用特定于XML的属性。检查此链接


我相信您正在寻找合适的人选。此外,需要序列化的属性必须声明为
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; } }
}

检查一下这个简单的.Net文件:是的,ofk,在我编写的过程中,我尝试使用Xml特定的属性,并且我有get/set属性。它只是忽略了任何一个atribute。您是否将所有的属性声明为
公共的
?我刚刚确认,这是必要的,以便
XmlSerializer
写出它们。
XmlIgnore
属性被添加到您不希望序列化的
public
属性中。这是另一个问题。如果我需要这个字段是私有的,但是使用get/set方法呢?我怎么写呢?像这样<代码>私有int x;公共int X{get{return X;}set{X=value;}}Yes,如下所示。
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; } }
}