You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

反序列化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:01:03