首页 > 解决方案 > 如何用已经 JSON 的字符串序列化类

问题描述

我对 JSON.NET 序列化完全陌生,迫切需要一些额外的帮助。

我有一个像这样的简单类,需要序列化为 JSON 字符串:

Public Class TestObject
    Public n1 As Integer
    Public n2 As Integer
    Public str1 As String
    Public str2 As String
End Class

我尝试将其序列化为 JSON,如下所示:

Dim tst As TestObject = New TestObject
With tst
    .n1 = 12
    .n2 = 15
    .str1 = "The name"
    .str2 = "{""prop1"": ""val1""}"
End With
Dim obj = JsonConvert.SerializeObject(tst)

结果是:

{"n1":12,"n2":15,"str1":"名字","str2":"{\"prop1\":\"val1\"}"}

但我需要的是:

{"n1":12,"n2":15,"str1":"名字","str2":{"prop1":"val1"}}

结果将发送到我的网络客户端。我尝试了几个属性,但没有一个具有所需的效果。

如果这是不可能的,那么我会选择第二好的解决方案,即:

{"n1":12,"n2":15,"str1":"名字","str2":"{""prop1"": ""val1""}"}

任何建议如何实现这一点?

问候,

阿诺。

标签: jsonstringvb.netjson.net

解决方案


为了实现这一点,您可以分配str2一些唯一的字符串,对其进行序列化,然后在序列化的 JSON 中替换它。

我将该逻辑放在类方法中,如下所示:

Public Class TestObject
    Public n1 As Integer
    Public n2 As Integer
    Public str1 As String
    Public str2 As String

    Public Function SerializeMe() As String
        Dim internalJson = str2
        'assign to str2 some unique string, to replace it after serialization
        str2 = "SomeUniqueCharacterSequence"
        SerializeMe = JsonConvert.SerializeObject(Me).Replace(str2, internalJson)
        'assign back the value of str2, so we won't change state of an object
        str2 = internalJson
    End Function
End Class

然后,在下面的代码中使用它会给你想要的结果:

Dim tst As TestObject = New TestObject
With tst
    .n1 = 12
    .n2 = 15
    .str1 = "The name"
    .str2 = "{""prop1"": ""val1""}"
End With
Dim obj = tst.SerializeMe()

推荐阅读