将XML分解为Class,Subclass&使SubClass的属性不为null

时间:2009-10-19 12:06:59

标签: c# xml xml-serialization

我有一些我正在反序列化的XML,除了我在序列化类中的一个属性之外,所有的工作都很好,例如也是一个类; Person.Address.Postcode。

Address是Person类中的属性,但Address是一个具有Postcode等属性的类。

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

我想要发生的是Person.Address不是null并且像Postcode这样的东西不是null而是空字符串。

我在Address属性上尝试了IsNullable = false属性,但这不起作用。

这怎么可能?

2 个答案:

答案 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,或任何您喜欢的),在某些方法中指定您想要发生的事情。