代码之家  ›  专栏  ›  技术社区  ›  Arno Voerman

如何用已有JSON的字符串序列化类

  •  0
  • Arno Voerman  · 技术社区  · 6 年前

    我对json.net-serialization完全陌生,迫切需要一些额外的帮助。

    我有一个这样的简单类,它需要序列化为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”

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

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

    “n1”:12,“n2”:15,“str1”:“名称”,“str2”:“”prop1“:”val1“”

    有什么关于如何实现这一点的建议吗?

    当做,

    阿诺。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Michał Turczyn    6 年前

    为了实现这一点,您可以将 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()
    
        2
  •  0
  •   Test12345    6 年前

    可以使用重载方法删除格式。

    JsonConvert.SerializeObject(source,Formatting.None);
    
        3
  •  0
  •   Arno Voerman    6 年前

    多亏了两个lasse vgster karlsen&michal turczyn,我现在有两个解决方案,它们都很好用。

    我只需要选择。 对于我的代码,我只是实现了以下内容,因为这是最简单的方法:

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

    谢谢。