2009-10-19 63 views
1

我有一些XML我反序列化,并且除了序列化类中的一个属性之外,所有工作都很好,也是一个类; Person.Address.Postcode。将XML序列化为类,子类和属性使子类不为空

地址是Person类中的一个属性,但Address是一个包含Postcode等属性的类。

如果传入的XML不包含地址信息,并且在我查看Person.Address时发生反序列化,那么这个值为null。

我想要发生的是Person.Address不为空,并且具有像Postcode不为空但空字符串的内容。

我已经尝试过地址属性上的IsNullable = false属性,但这不起作用。

这怎么可能?

回答

1

如果未设置,则可以使Postcode进入返回String.Empty的属性,否则返回值。或者使其不可能在设置块中设置为空。你也可以通过将它变成一个结构来使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; 
    } 
} 

我找到的第一个选项更好,因为即使地址类里面的东西设置为null,它永远不会返回null。

+0

我该如何整洁地修改Postcode属性(如下)到您建议的内容 public string Info { get; 集; } – Jon 2009-10-19 12:26:12

0

如果您正在使用DataContract,只需使用OnDesrialized Attribiute(或OnDeserializing,或任何你喜欢的),在某些方法上,在其中指定你想要发生的事情。

+0

有没有办法实现此功能与 XmlSerializer – Jon 2009-10-19 13:05:58