0

我想要一个接受包含 JSON 对象的文件名的构造函数

我在包含 JSON 对象(作为文本)的目录中有文件

我想:

Public Sub New(filename as string)
   Dim JSONString As String = File.ReadAllText(filename)
   Dim j As New JavaScriptSerializer()
   Dim o As Object = j.DeserializeObject(JSONString)
   Me = o
End Sub

显然我做不到这条线Me = o

我想知道人们可以想出什么技巧。我只需要替换对New Profile(...)静态方法的所有调用吗?你会怎么做?

我对接受字符串的构造函数有一堆旧调用,我希望它们使用新机制。

4

1 回答 1

1

您不能Me在构造函数中赋值。“技巧”是可能的,比如反射反序列化对象的属性并在构造函数中分配相同的值,但是很麻烦且不明智。

您需要的是一个通用的辅助方法来反序列化T文件名中任何类型的实例:

Public Shared Function DeserializeFile(Of T)(filename As String) As T
    Dim JSONString As String = File.ReadAllText(filename)
    Dim j As New JavaScriptSerializer()
    Return j.Deserialize(Of T)(JSONString)
End Function

用法,如果助手在SerializationHelper并且您正在反序列化的类是,根据您的问题,Profile

Dim obj As Profile = SerializationHelper.DeserializeFile(Of Profile)("filename.json")
于 2018-03-14T15:47:11.723 回答