对于应用程序配置,我经常会创建一个配置类,其中包含应用程序的配置值,然后将其反序列化为要使用的对象。配置对象通常与用户界面控件进行数据绑定,以便用户可以更改和保留配置。配置类通常具有分配给属性的默认值,以便始终存在默认配置。这效果很好。我最近遇到了一种情况,我有一个提供一些默认路径信息的字符串列表。我所看到的让我意识到我并不完全知道在 XML 反序列化到对象期间如何填充对象属性。
所以我创建了一个简单的示例来展示该行为。下面是一个简单的类,它有几个具有一些代码默认值的属性。
[Serializable]
public class TestConfiguration
{
public String Name
{
get
{
return mName;
}
set
{
mName = value;
}
}private String mName = "Pete Sebeck";
public List<String> Associates
{
get
{
return mAssociates;
}
set
{
mAssociates = value;
}
} private List<String> mAssociates = new List<string>() { "Jon", "Natalie" };
public override String ToString()
{
StringBuilder buffer = new StringBuilder();
buffer.AppendLine(String.Format("Name: {0}", Name));
buffer.AppendLine("Associates:");
foreach(String associate in mAssociates)
{
buffer.AppendLine(String.Format("\t{0}", associate));
}
return buffer.ToString(); …Run Code Online (Sandbox Code Playgroud) 我有两个班级:
Expression 有一个字符串 Name 和一个名为 Literal 的 LiteralModel。
public class ExpressionModel
{
private string name;
public string Name { get => name ?? ""; set => name = value; }
private LiteralModel literal;
public LiteralModel Literal
{
get => literal ?? new LiteralModel();
set => literal = value;
}
}
public class LiteralModel
{
private string value;
public string Value { get => value ?? ""; set => this.value = value; }
}
Run Code Online (Sandbox Code Playgroud)所有都是具有公共 getter …