我想要一个构造函数,它接受一个包含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(...)
的调用替换为静态方法吗?你会做什么?
我对一个接受字符串的构造函数进行了一些旧的调用,我希望他们使用新的机制。
答案 0 :(得分: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")