相关疑难解决方法(0)

使用代码默认值对集合属性进行 XML 反序列化

对于应用程序配置,我经常会创建一个配置类,其中包含应用程序的配置值,然后将其反序列化为要使用的对象。配置对象通常与用户界面控件进行数据绑定,以便用户可以更改和保留配置。配置类通常具有分配给属性的默认值,以便始终存在默认配置。这效果很好。我最近遇到了一种情况,我有一个提供一些默认路径信息的字符串列表。我所看到的让我意识到我并不完全知道在 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)

c# xml serialization xmlserializer

5
推荐指数
1
解决办法
1623
查看次数

为什么 Newtonsoft 反序列化器不反序列化智能 getter?

语境

我有两个班级:

  • LiteralModel 是字符串 Value 属性的包装器。
  • 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 …

c# json.net

5
推荐指数
1
解决办法
264
查看次数

标签 统计

c# ×2

json.net ×1

serialization ×1

xml ×1

xmlserializer ×1