在构造函数中反序列化为self

时间:2012-10-19 11:56:03

标签: .net vb.net json javascriptserializer

我想要一个构造函数,它接受一个包含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(...)的调用替换为静态方法吗?你会做什么?

我对一个接受字符串的构造函数进行了一些旧的调用,我希望他们使用新的机制。

1 个答案:

答案 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")