我有一些我正在反序列化的XML,除了我在序列化类中的一个属性之外,所有的工作都很好,例如也是一个类; Person.Address.Postcode。
Address是Person类中的属性,但Address是一个具有Postcode等属性的类。
如果传入的XML不包含地址信息,并且在查看Person.Address时发生反序列化,则为null。
我想要发生的是Person.Address不是null并且像Postcode这样的东西不是null而是空字符串。
我在Address属性上尝试了IsNullable = false属性,但这不起作用。
这怎么可能?
答案 0 :(得分:1)
如果未设置,则可以将Postcode转换为返回String.Empty的属性,否则返回值。或者使其无法在set block中设置为null。此外,通过将Address变为结构,您可以使Address无法为null。在这种情况下,您可以在无参数构造函数中将Postcode设置为String.Empty。或者你可以让你的类实现IDeserializationCallback,并在方法OnDeserialization中随时随地创建你的地址。
private string _postcode;
public string Postcode
{
get
{
return _postcode ?? String.Empty;
}
set
{
_postcode = value;
}
}
或
private string _postcode = String.Empty;
public string Postcode
{
get
{
return _postcode;
}
set
{
_postcode = value ?? String.Empty;
}
}
我发现第一个选项更好,因为即使Address类中的某些内容将其设置为null,它也永远不会返回null。
答案 1 :(得分:0)
如果您正在使用DataContract,只需使用OnDeserialized属性(或OnDeserializing,或任何您喜欢的),在某些方法中指定您想要发生的事情。