【发布时间】:2019-11-25 10:17:19
【问题描述】:
我尝试将 XML 对象反序列化为模型,但由于解析错误而失败。
我的代码是:
[XmlType(AnonymousType = true)]
[XmlRoot(ElementName = "Status", Namespace = "", IsNullable = false)]
public class SomeClass
{
public DateTime? LastStatusUpdate;
[XmlElement("LastStatusUpdate")]
public string LastStatusUpdateString
{
set { LastStatusUpdate = !string.IsNullOrEmpty(value) ? XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.Unspecified) : (DateTime?)null; }
}
}
由于xmlElement和DateTime对象同名,反序列化失败。 当我更改 DateTime 参数的名称时,它起作用了。
为什么?
【问题讨论】:
-
失败的原因是 LastStatusUpdate 被声明为 public。将其设为私有,它应该可以工作。
-
@jdweng 虽然 会起作用,但 IMO 并不是解决它的最佳方法,因为它也可以在不影响可访问性的情况下轻松修复。
-
@Marc Gravell:绝对错误!!!你看代码了吗? OP 正在使用“集合”将自定义 DataTime 字符串转换为对象。所以该属性必须是私有的,这样序列化程序才不会序列化这两个属性。
-
@shlosi :根据我的经验,Xml 序列化程序似乎总是需要一个 GET 属性,并且不能仅使用 SET 。上周我只尝试了一个 SET,但没有成功。
-
@jdweng 感谢您的侮辱,我显然对与序列化相关的所有内容一无所知...我一定想象过
[XmlIgnore]...
标签: c# xml serialization types model