反序列化JSON时Unique ID被重置,需保留原ID的解决办法
解决方法
针对反序列化时ID被重新生成的问题,最简单的方案是给YubikeyPool类添加一个标记了JsonConstructor的私有构造函数,让System.Text.Json在反序列化时使用这个构造函数初始化ID,而非调用无参构造函数。这样既保留了无参构造函数自动生成Guid的逻辑,又能在反序列化时复用原有的ID值。
修改后的YubikeyPool类代码:
<Serializable> Public Class YubikeyPool Public ReadOnly Property ID As Guid Public Property Name As String ' 创建新实例时自动生成Guid的无参构造函数 Public Sub New() ID = Guid.NewGuid() End Sub ' 反序列化专用构造函数,标记JsonConstructor让Json序列化器识别 <JsonConstructor> Private Sub New(id As Guid, name As String) Me.ID = id Me.Name = name End Sub Public Overrides Function ToString() As String Return Name End Function End Class
原理说明
- 创建新实例时,调用无参构造函数,自动生成新Guid作为ID。
- 反序列化时,System.Text.Json会优先使用标记了
JsonConstructor的构造函数,将序列化时保存的ID和Name值传入,直接赋值给属性,不会触发无参构造函数的Guid生成逻辑。
额外说明
无需修改你现有的序列化/反序列化函数和GetJsonSerializerOptions配置,该方案完全兼容当前代码逻辑。
内容的提问来源于stack exchange,提问作者Willy
相关产品推荐
相关产品推荐

