首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XmlSerializer忽略属性

XmlSerializer忽略属性
EN

Stack Overflow用户
提问于 2016-12-22 16:31:36
回答 3查看 1.2K关注 0票数 1

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

它还忽略了其他属性,如[XmAtribute]。然后我注意到,甚至没有必要使用任何属性,而且我可以在没有这些属性的情况下序列化类,如何忽略一些字段呢?

我的班级:

代码语言:javascript
复制
[Serializable]
public class Route
{
    int busNumber;
    string busType, destination;
    DateTime departure, arrival;
    [NonSerialized]DateTime creationDate;
    ...
}

我正在尝试序列化List<Route>

代码语言:javascript
复制
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();
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-22 16:36:41

我相信你是在找XmlIgnoreAttribute。另外,需要序列化的属性必须声明为public

用法如下:

代码语言:javascript
复制
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; } }
}
票数 2
EN

Stack Overflow用户

发布于 2016-12-22 16:35:08

尝试重写序列化程序:

代码语言:javascript
复制
// 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

票数 0
EN

Stack Overflow用户

发布于 2016-12-22 16:36:12

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

https://msdn.microsoft.com/en-us/en-en/library/system.xml.serialization.xmlattributes.xmlignore(v=vs.110).aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41287717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档