使用System.Text.Json反序列化时,初始化变量是否浪费计算资源?
System.Text.Json反序列化时预初始化Dictionary的行为
你定义的类代码如下:
public class CurrencyItem : UserDDBItemInstance { public Dictionary<string, int> Currencies { get; set; } = new Dictionary<string, int>(); }
针对你的问题,结论是:这个预先初始化的Dictionary<string, int>不会被创建后丢弃,具体行为分两种场景:
- 当JSON中包含
Currencies字段的有效键值对数据时:System.Text.Json的反序列化器会直接复用你预先初始化的字典实例,将JSON中的数据添加到该字典里,不会创建新的字典对象来替换它。 - 当JSON中没有
Currencies字段,或者该字段值为null时:反序列化器会保留你预先初始化的空字典,不会将属性置为null。
唯一的例外情况是:如果给Currencies属性添加了[JsonRequired]特性,同时JSON中未提供该字段,此时反序列化会抛出异常,但预先初始化的字典也不会被丢弃(异常发生在反序列化完成前,对象实例的初始化逻辑已经执行)。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

