c# - 我应该如何处理反序列化的字符串实习?

标签 c# string-interning

在下面的示例中,我将字符串驻留在构造函数中,这很好。但是,当我从二进制格式化程序反序列化对象时,我认为字符串不会被保留,因为应该调用构造函数。我应该如何确保 _name 字符串被保留? ...还是会被拘留?

编辑: 因此它似乎可以在不处理 OnDeserializedAttribute 的情况下工作(正确地实习字符串)。它是如何做到的?

我正在使用内存分析器,无论是否使用下面的方法,它仍然会保留字符串?魔法? :-/

   [OnDeserializedAttribute]
   private void OnDeserialized(StreamingContext context)
   {
       _name = string.Intern(_name);
   }

谢谢

[Serializable]
class City
{
    private readonly string _name;

    public City(string t)
    {
        _name = string.Intern(t);
    }

    public string Name
    {
        get { return _name; }
    }

    public override string ToString()
    {
        return _name;
    }
}

最佳答案

如果您实现ISerializable 接口(interface)(而不是属性),这是可能的。它会让你进行反序列化。

但是好像很没必要。你确定你正在用这个完成任何事情吗?

关于c# - 我应该如何处理反序列化的字符串实习?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2965657/

相关文章:

c# regex 和 [] expression ,为什么 [+*/-] 无法解析?

c# - 使用 Raspberry pi 调用 rest API windows 10 IoT

string - 为什么这个字符串的引用计数为 4? (德尔福2007)

java - 我们什么时候应该在 String 字面量上使用 String 的 intern 方法

python - 是否可以直接检查实习字符串池?

java - Java 中的字符串实习

c# - Asp.NET DropDownList SelectedItem.Value 没有改变

C# WPF gif 黑色背景

c# - 从 Web.Config 引用命名空间

java - 运行时字符串是否被实习?