C# 将XML反序列化为类、子类和;使子类不为null的属性
我有一些XML,我正在反序列化,除了序列化类中的一个属性之外,所有工作都很好,例如,它也是一个类;Person.Address.Postcode Address是Person类中的属性,但Address是具有Postcode等属性的类 如果传入的XML不包含地址信息,并且在查看Person.Address时发生反序列化,则该值为null 我希望Person.Address不为null,邮政编码不为null,但字符串为空 我在Address属性上尝试了IsNullable=false属性,但这不起作用C# 将XML反序列化为类、子类和;使子类不为null的属性,c#,xml,xml-serialization,C#,Xml,Xml Serialization,我有一些XML,我正在反序列化,除了序列化类中的一个属性之外,所有工作都很好,例如,它也是一个类;Person.Address.Postcode Address是Person类中的属性,但Address是具有Postcode等属性的类 如果传入的XML不包含地址信息,并且在查看Person.Address时发生反序列化,则该值为null 我希望Person.Address不为null,邮政编码不为null,但字符串为空 我在Address属性上尝试了IsNullable=false属性,但这不起
这是怎么可能的?您可以将Postcode设置为返回字符串的属性。如果未设置,则为空,否则为值。或者使其无法在set块中设置为null。此外,您还可以通过将地址设置为结构使其不可能为空。在这种情况下,您可以在无参数构造函数中将Postcode设置为String.Empty。或者,您可以让您的类实现IDeserializationCallback,并在方法OnDeserialization中根据需要生成地址
private string _postcode;
public string Postcode
{
get
{
return _postcode ?? String.Empty;
}
set
{
_postcode = value;
}
}
或
我发现第一个选项更好,因为即使Address类中的某些内容将其设置为null,它也不会返回null。您可以将Postcode设置为返回字符串的属性。如果未设置,则为空,否则为空。或者使其无法在set块中设置为null。此外,您还可以通过将地址设置为结构使其不可能为空。在这种情况下,您可以在无参数构造函数中将Postcode设置为String.Empty。或者,您可以让您的类实现IDeserializationCallback,并在方法OnDeserialization中根据需要生成地址
private string _postcode;
public string Postcode
{
get
{
return _postcode ?? String.Empty;
}
set
{
_postcode = value;
}
}
或
我发现第一个选项更好,因为即使Address类中的某些内容将其设置为null,它也不会返回null。如果您使用的是DataContract,只需在某些方法上使用OnDesSerialized属性(或OnDeserialize,或任何您喜欢的),在这些方法中指定希望发生的事情。如果您使用的是DataContract,只需在某些方法上使用OnDesSerialized属性(或OnDeserialize,或任何您喜欢的),在这些方法中指定您希望发生的事情。如何将Postcode属性(下面)巧妙地修改为您建议的公共字符串信息{get;set;}如何巧妙地修改Postcode属性(下面)对于您建议的公共字符串信息{get;set;},没有办法用XmlSerializer实现此功能,也没有办法用XmlSerializer实现此功能