【问题标题】:Issue with XML Generating from C# Object从 C# 对象生成 XML 的问题
【发布时间】:2014-12-19 22:06:56
【问题描述】:

我正在尝试从一个对象生成一个 XML 文件。我在生成 XML 文件之前设置了一个断点,以便检查这些值。该对象及其值看起来不错。但是,在生成 XML 文件后,它缺少一个关键组件,即代码。

这是我期望看到的。

<eDocument Code="UN" Cat="ST">                          
  <id myId="5"/>
</eDocument>

这是生成的实际 xml 文件。

<eDocument Cat="EST">                          
  <id myId="5"/>
</eDocument>

这是被序列化以生成 xml 文件的对象。

sDoc eDocument = new sDoc();
eDocument.Code = "UN";
eDocument.Cat = "ST";
eDocument.myId = new ID[1];
eDocument.myId[0].id= 5;

这就是我保存文件的方式

 string fileName= "student.xml";
 XmlSerializer serializeObject = new XmlSerializer(eDocument.GetType());
 TextWriter streamWritter = new StreamWriter(Server.MapPath(@"~/student/" + fileName));
 serializeObject.Serialize(streamWritter, eDocument); // I check the eDocument Object, and it has all the correct inforamtion
 streamWritter.Close();

我在这里做错了什么吗?

【问题讨论】:

  • 向我们展示sDoc 类。
  • 不显示实际的 sDoc 类代码没有人可以帮助你

标签: c# xml xml-deserialization


【解决方案1】:

您需要检查 sDoc 类中的“代码”属性。

一个属性应该是公共读/写的,以便 Xml 可序列化。默认情况下,如果没有属性应用于公共属性,则将其序列化为 XML 元素。在您的情况下,它根本没有序列化,这意味着有问题。

首先检查:属性是否在读(get)和写(set)中都是公共的?

二查:该字段不是标有[XmlIgnoreAttribute]的吗?

最后:使用 [XmlAttribute] 标记 Cat 属性会将其 xml 序列化为属性。

【讨论】:

  • 阅读您的评论后,我再次检查了我的属性。它正在添加一个附加属性 [System.ComponentModel.DefaultValueAttribute("UN")]。我删除了它,代码工作正常。
  • 很高兴知道,这是我无法猜到的 ;-)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多