【问题标题】:Trouble parsing Json into .net Object无法将 Json 解析为 .net 对象
【发布时间】:2014-05-19 02:19:37
【问题描述】:

我研究过类似的其他问题,但我做的不对。我的 vb.net 类是错误的或什么的。我的班级应该只尝试代表候选人还是什么? 我需要帮助来反序列化这个 json:

{
  "spatialReference" : {
    "wkid" : 2286
  },
  "candidates" : [
    {
      "address" : "100 MAIN ST",
      "location" : {
        "x" : 1144782.9490543604,
        "y" : 81361.525678694248
      },
      "score" : 100,
      "attributes" : {

      }
    },
    {
      "address" : "100 E MAIN ST",
      "location" : {
        "x" : 1120908.3257195801,
        "y" : 169917.71846333146
      },
      "score" : 77,
      "attributes" : {

      }
    }
  ]
}

我正在使用以下代码进行反序列化:

Public Shared Function Deserialise(Of T)(ByVal json As String) As T
      Dim obj As T = Activator.CreateInstance(Of T)()

      Using ms As MemoryStream = New MemoryStream(Encoding.Unicode.GetBytes(json))
         Dim serializer As DataContractJsonSerializer = New       DataContractJsonSerializer(obj.GetType())
         obj = serializer.ReadObject(ms)
         Return obj
      End Using
   End Function

我的 vb.net 类看起来像这样:

<DataContract()> _
Public Class SearchResults
   Private mCandidates() As candidate

   <DataContract()> _
   Public Class SpatialReference
      Private mwkId As String


      <DataMember()> _
      Public Property wkid() As String
         Get
            Return mwkId
         End Get
         Set(ByVal value As String)
            mwkId = value
         End Set
      End Property
   End Class

   <DataMember()> _
   Public Property Candidates() As candidate()
      Get
         Return mCandidates
      End Get
      Set(ByVal value As candidate())
         mCandidates = value
      End Set
   End Property
End Class

<DataContract()> _
   Public Class candidate
   Private mAddress As String
   Private mLocation As Location
   Private mScore As String
   Private mAttr As String

   <DataMember()> _
Public Property address() As String
      Get
         Return mAddress
      End Get
      Set(ByVal value As String)
         mAddress = value
      End Set
   End Property

   <DataMember()> _
   Public Property location() As Location
      Get
         Return mLocation
      End Get
      Set(ByVal value As Location)
         mLocation = value
      End Set
   End Property

   <DataMember()> _
   Public Property score() As String
      Get
         Return mScore
      End Get
      Set(ByVal value As String)
         mScore = value
      End Set
   End Property

   <DataMember()> _
   Public Property attributes() As String
      Get
         Return mAttr
      End Get
      Set(ByVal value As String)
         mAttr = value
      End Set
   End Property
End Class

【问题讨论】:

  • 什么到底是行不通的?
  • 嗨,马特,我没有在我构建的 .net 类中添加任何内容。没有错误,但也没有结果。
  • 我可能会重新编写你的类来反序列化,但我会说这个。获取 Visual Studio 的此扩展 visualstudiogallery.msdn.microsoft.com/… 它允许您复制 JSON 输出并右键单击 - 粘贴为类;相信我花几个小时写这些课程的人,这行得通!
  • 天啊,我不敢相信。它似乎仅适用于 VS 2012,并且仅在使用 C# 项目时才会粘贴,但它完全成功了。它为我创建了 JSon 类,我将它们粘贴到我的 vb 项目中(当然是 vb.net),它反序列化了它,我得到了我的结果。我认为我的课程是正确的,但数据类型不正确。非常感谢马特的小费。雅虎!
  • 哈哈,没问题 - 这是 f0x 不是马特! ;) 马特编辑了你的帖子。

标签: json parsing


【解决方案1】:

我不知道 .net,但我可以告诉你它与 JAVA 相关。您可以将其与 .Net 联系起来

当我们需要将我们的类对象序列化或反序列化为 json 或从 json 中我们需要 Gson,

在 Java 中我们一般导入 tha 包 Gson 包创建它的对象例如:-

假设我有一个类 User,你想序列化他的对象。现在来做这个

在 Gson 的帮助下,使用一些键名将整个对象转换为 JSON

jsonObject.put("KEYFORTHISjsonObject", gson.toJson(userClassObject));

现在您已将其序列化为 JSON, 在反序列化时

只需创建您的用户对象。从 Json 文件中获取 Json 对象

JSONObject jsonObject = new JSONObject(jsonFile.toString())
    userObject2 =  gson.fromJson(jsonObject.toString(), User.class);

所以现在 userObject2 拥有你之前序列化的所有值。

如果您不熟悉 JAVA,请阅读 Gson for .net 或者你也可以阅读这个链接http://james.newtonking.com/projects/json-net.aspx

【讨论】:

  • 上面的 json 是从 web 服务调用返回的字符串,我需要将其反序列化为 .net 对象。因此我创建了上面的类来反序列化它。如果可能的话,这就是我需要帮助的地方,假设我对 DataContractJsonSerializer 的使用是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2010-09-30
  • 1970-01-01
相关资源
最近更新 更多