vb.net本身的类构造函数
我有一个包装类来帮助反序列化传入的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
你不能重新分配的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。
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
我希望有一个聪明的语法这将避免创建另一个实例。这个解决方案虽然工作完美 - 谢谢。 –
其实现在我正确地测试它,我可以看到这种方法创建了一个无限递归。 –
如果您按原样复制代码,则此处不应有递归。 – Stokke
[相关](https://*.com/questions/27511675/modify-existing-object-with-new-partial-json-data-using-json-net) – john