Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将XML反序列化为类、子类和;使子类不为null的属性_C#_Xml_Xml Serialization - Fatal编程技术网

C# 将XML反序列化为类、子类和;使子类不为null的属性

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属性,但这不起

我有一些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实现此功能