考虑下面的类
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
用XML文件中的某个值序列化这个Person类(Name & Age),并反序列化返回。我想在反序列化时,当Name值为Null或Empty时分配一些默认值。我试过下面,但它不工作。
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
if (_name == null)
{
_name = "Some Name";
}
}
}
}
如何在使用XmlSerializer反序列化C#对象时设置字符串和int字段的默认值。
4条答案
按热度按时间vulvrdjw1#
问题是您已经在setter中放置了默认值的逻辑,但它没有被调用,因为在您要反序列化的XML中没有与此相关的数据。
当
XmlSerializer
反序列化时,它将首先调用构造函数,然后设置值。所以如果你想设置默认值,请在构造函数中执行。任何有反序列化值的东西都将被应用到它上,而那些没有反序列化的东西仍然会有默认值。w7t8yxp52#
其他答案也建议默认值应该解释为默认构造函数赋予属性的值。
如果您想要一个XML序列化程序,它可以考虑默认值(不会使用默认值序列化属性),您可以尝试this one(免责声明:我写的)。
因此,您可以如下定义
Person
类。请参见here一个活生生的例子。这些库在NuGet上可用。它同时支持Linq2Xml(
XElement
)和常规XmlWriter
。k5hmc34c3#
您必须在
Contructor
内部初始化property
,如Own Pauling或者你可以像这样
auto-initialize
:你的代码演示。
当你在
Deserialization
之前设置一些东西(任何东西,甚至是null
)到property
时,它只是工作。cedebl8k4#
您可以像这样设置默认值