Blazored Server LocalStorage仅支持对象属性而非字段?求原因解析
字段与属性在Blazored LocalStorage中的差异原因
核心问题出在JSON序列化的默认规则上——Blazored LocalStorage依赖的System.Text.Json(默认序列化库)只会处理公共属性,对字段视而不见。
具体逻辑:
- 用带
{ get; set; }的属性时,这是标准的C#公共属性,序列化器会自动识别:存入LocalStorage时把Message的值打包进JSON,读取时再把JSON里的对应值还原到属性上,整个流程正常。 - 改成公共字段后:
- 存入时,序列化器不会把
Message字段的内容写入JSON,导致LocalStorage里的对象根本没有Message的数据; - 读取时,JSON里找不到
Message相关内容,反序列化出来的StatusData对象的Message只能保持默认的空字符串,看起来像是读取失败,本质是存入阶段就没把数据存进去。
- 存入时,序列化器不会把
验证方式:
打开浏览器F12的Application标签,找到LocalStorage里的站点存储项,对比两种写法的JSON内容:用字段时,JSON里完全没有Message这个键值对。
非要用字段的解决办法:
给字段加上[JsonPropertyName]特性,强制序列化器处理它:
using System.Text.Json.Serialization; public class StatusData { [JsonPropertyName("Message")] public string Message = string.Empty; }
内容的提问来源于stack exchange,提问作者Hamilton Woods
相关产品推荐
相关产品推荐

