json - 如何用已经 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""}"}
任何建议如何实现这一点?
问候,
阿诺。
解决方案
为了实现这一点,您可以分配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()
推荐阅读
- c# - 在服务堆栈中返回 403 状态码
- android - Android:画布在旋转时被清除
- c++ - 如何通过 C++ 中的链接器进行模拟测试
- scala - saveAsObjectFile 和持久化 apache spark 有什么区别?
- java - 无法从 cxf-codegen-plugin 插件生成肥皂信封
- go - 如何在golang中结合接口和结构?
- node.js - aws-sdk(节点)S3 NoSuchKey 错误,由 listObjectsV2 返回的键
- c++ - Qt creator -fno-elide-constructors 不工作
- javascript - 异步/等待不适用于反应 js(钩子)
- java - 为什么双参数化函数接受浮点数而不接受浮点数?