C# 由于对象名称不匹配,无法反序列化XML

C# 由于对象名称不匹配,无法反序列化XML,c#,xml,serialization,types,model,C#,Xml,Serialization,Types,Model,我试图将XML对象反序列化到模型中,但由于解析错误而失败 我的代码是: [XmlType(AnonymousType = true)] [XmlRoot(ElementName = "Status", Namespace = "", IsNullable = false)] public class SomeClass { public DateTime? LastStatusUpdate; [XmlElement("LastStatusUpdate")] p

我试图将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参数的名称时,它起了作用


为什么?

只需将
[XmlIgnore]
添加到
LastStatusUpdate
,它就知道不需要查看它了。然后另一个(
LastStatusUpdateString
[xmlement(“LastStatusUpdate”)]
)应该可以正常工作

默认情况下,
XmlSerializer
的工作方式就像每个公共成员
Foo
上都有
[xmlement]
,它将其视为与成员同名的元素(因此:

LastStatusUpdate
上没有
get
,这似乎也很奇怪-感觉应该有一个:

get=>LastStatusUpdate==null?无效的:
ToString(LastStatusUpdate.Value,XmlDateTimeSerializationMode.Unspecified);

public bool应该序列化LastStatusUpdateString()=>LastStatusUpdate.HasValue;

失败的原因是LastStatusUpdate已声明为公共。让它私有化,它应该会工作。@jdweng虽然这会起作用,但在我看来,这并不是解决它的最佳方法,因为它也可以在不影响可访问性的情况下进行简单的修复。@Marc gravel:绝对错误!!!你看过密码了吗?OP使用“set”将自定义数据时间字符串转换为对象。因此该属性必须是私有的,这样序列化程序就不会同时序列化这两个属性。@shlosi:Xml序列化程序似乎总是想要一个GET属性,而不会仅使用我的经验中的一组。上周我只试了一套,但没用。@jdweng谢谢你的侮辱,我显然不知道与序列化相关的一切。。。我一定想象过
[XmlIgnore]
。。。