【问题标题】:Serialization of custom data types VB.netVB.net 自定义数据类型的序列化
【发布时间】:2017-11-17 13:57:27
【问题描述】:

我有一个需要从 VB.net 序列化为 JSON 字符串的对象,以便我可以通过我的 REST API 将其传递到 Android 设备。但是,我正在序列化的对象包含自定义数据类型,例如:

Public dbPtr As New DataBasePurchaseOrderPointer(listOfFields)

当我通过这个对象时

Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer()
Dim serializedObject = serializer.Serialize(obj)

所有字段为空,如

{"dbPtr":""}

所有对象的字段都包含核心的“原始”数据类型。例如,读取字段中的数据时,dbPtr 显然是一个 long。

有没有一种方法可以让我通过自定义序列化程序传递这个对象,该序列化程序可以简单地复制对象字段的原始值,然后对其进行序列化?

【问题讨论】:

  • 成员是公开的吗?如果它们是私有的,则序列化无法读取它们 afaik
  • 那个具体的在例子中是公开的
  • 在构造类(obj 的类)时,任何已初始化的字段都会在构造函数代码运行之前完成。我猜listOfFieldsPublic dbPtr As New DataBasePurchaseOrderPointer(listOfFields) 发生时为空。这可能吗?单步执行您的代码。

标签: vb.net serialization


【解决方案1】:

为了解决我的问题,我最终采用了一个“自定义”序列化类,它将获取对象字段的当前数据并将它们放入字典中。当.ToString 被调用时,它会将字段数据转换为可以填充到字典中的字符串。之后,REST API 将字典序列化并将其作为 JSON 对象传递给我的 Android 应用程序。

    Public Function serializeObject(obj As Object) As Dictionary(Of String, String)
    Dim dict As New Dictionary(Of String, String)
    Dim properties As New ArrayList

    For Each prop As FieldInfo In obj.GetType.GetFields
        properties.Add(prop)
    Next

    For Each prop In properties
        Try
            dict.Add(prop.Name, prop.getValue(obj).ToString)
        Catch ex As Exception
            Console.WriteLine(ex.StackTrace)
        End Try
    Next

    Return dict

End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多