2017-11-11 81 views
0

我有一个包装类来帮助反序列化传入的json消息。 目前我正在使用它。vb.net本身的类构造函数

Dim oXMessage As XMessage = JsonConvert.DeserializeObject(Of XMessage)(message) 

我想创建一个构造器类,这样我可以更干净实例化。像这样

Dim oXMessage as XMessage = New XMessage(message)   

我试过下面的构造函数,但它不起作用。 有人可以指点我正确的方向吗?

Public Class XMessage 
    <JsonProperty("e")> Public MessageType As String 
    <JsonProperty("data")> Public MessageData As Object 
    <JsonProperty("ok")> Public MessageOk As String 

    Public Sub New(message As String) 
     Me = JsonConvert.DeserializeObject(Of Me)(message) 
    End Sub 
End Class 
+1

[相关](https://stackoverflow.com/questions/27511675/modify-existing-object-with-new-partial-json-data-using-json-net) – john

回答

0

你不能重新分配的Me在构造函数中,因为这是目前正在建造的对象。但你可以叫JsonConvert.PopulateObject()初始化其内容

Public Class XMessage 
    <JsonProperty("e")> Public MessageType As String 
    <JsonProperty("data")> Public MessageData As Object 
    <JsonProperty("ok")> Public MessageOk As String 

    Public Sub New(message As String) 
     JsonConvert.PopulateObject(message, Me) 
    End Sub 

    Public Sub New() 
    End Sub 
End Class 

样品fiddle

0

Me关键字指的是当前实例,不能作为赋值的对象。

相反,您可能想要做的是创建一个新对象,反序列化它,并将新对象成员变量复制到当前实例。

编辑:没有辅助功能

Public Class XMessage 

    <JsonProperty("e")> Public MessageType As String 
    <JsonProperty("data")> Public MessageData As Object 
    <JsonProperty("ok")> Public MessageOk As String 

    Public Sub New(message As String) 
     Dim other = JsonConvert.DeserializeObject(Of XMessage)(message) 
     Me.MessageType = other.MessageType 
     Me.MessageData = other.MessageData 
     Me.MessageOk = other.MessageOk 
    End Sub 

End Class 

原文:

Public Class XMessage 

    <JsonProperty("e")> Public MessageType As String 
    <JsonProperty("data")> Public MessageData As Object 
    <JsonProperty("ok")> Public MessageOk As String 


    Public Sub New(message As String) 
     Dim other as XMessage= Deserialize(message) 
     Me.MessageType = other.MessageType 
     Me.MessageData = other.MessageData 
     Me.MessageOk = other.MessageOk 
    End Sub 


    Public shared Function Deserialize(message as String) as XMessage 
     return JsonConvert.DeserializeObject(Of XMessage)(message) 
    End Function 

    Public Shared Function Serialize(message As XMessage) As String 
     return JsonConvert.SerializeObject(message) 
    End Function 

End Class 
+0

我希望有一个聪明的语法这将避免创建另一个实例。这个解决方案虽然工作完美 - 谢谢。 –

+0

其实现在我正确地测试它,我可以看到这种方法创建了一个无限递归。 –

+0

如果您按原样复制代码,则此处不应有递归。 – Stokke