2013-10-23 27 views
1

我已經在asp.net通過HTTP POST收到以下JSON:JSON對象到一個DataTable和一個字符串

{ 
"Header": { 
    "MCC": "415", 
    "F0": "0", 
    "REG ID": "0" 
}, 
"Contacts": [ 
    { 
     "name": "jocelyne", 
     "mo": "jocelyne" 
    }, 
    { 
     "name": "eliane", 
     "mo": "12345678" 
    } 
] 
} 

我只需要把數據在接觸中的DataTable和反序列化在報頭中的數據到3個變量...

我想這:

Dim deserializedProduct As List(Of Dictionary(Of String, String)) = JsonConvert.DeserializeObject(Of List(Of Dictionary(Of String, String)))(json) 

這:

Dim table As DataTable = JsonConvert.DeserializeObject(Of DataTable)(json) 

我嘗試使用此JSON:

{ 
"Data": [ 
    { 
     "MCC": "415", 
     "F0": "0", 
     "REG ID": "0" 
    } 
], 
"Contacts": [ 
    { 
     "name": "jocelyne", 
     "mo": "jocelyne" 
    }, 
    { 
     "name": "eliane", 
     "mo": "12345678" 
    } 
] 
} 

但這些都不工作...

回答

1

一種方法是創建的數據相匹配,你收到了一些類:

Class Data 
    Public Header As Header 
    Public Contacts As List(Of Contact) 
End Class 

<System.Runtime.Serialization.DataContract> 
Class Header 
    <System.Runtime.Serialization.DataMember(Name := "MCC")> 
    Public MCC As Integer 
    <System.Runtime.Serialization.DataMember(Name := "F0")> 
    Public F0 As Integer 
    <System.Runtime.Serialization.DataMember(Name := "REG ID")> 
    Public RegId As Integer 
End Class 

Class Contact 
    Public Name As String 
    Public Mo As String 
End Class 

所以很容易對數據進行反序列化:

Sub Main 
    Dim json As String = <json> 
         { 
         "Header": { 
          "MCC": "415", 
          "F0": "0", 
          "REG ID": "0" 
         }, 
         "Contacts": [ 
          { 
           "name": "jocelyne", 
           "mo": "jocelyne" 
          }, 
          { 
           "name": "eliane", 
           "mo": "12345678" 
          } 
         ] 
         }</json>.Value 


    Dim data As Data = JsonConvert.DeserializeObject(Of Data)(json) 
    data.Dump() 
End Sub 

enter image description here

現在您可以輕鬆訪問諸如data.Header.MCC

請注意,我這裏用DataContract/DataMemberHeader類,你要尋找的值,否則解串器也沒辦法知道REG ID應映射到RegId(因爲在VB.Net中不能有空格的成員名稱)。

如果你真的想爲您的聯繫人DataTable,只是聲明Data.ContactsDataTable

Class Data 
    Public Header As Header 
    Public Contacts As DataTable 
End Class 
+0

我到達那裏的當前位置 – User7291

+0

@JocelyneElKhoury此錯誤有沒有關係可沒有源代碼這段代碼。嘗試使用Google搜索「沒有可用於當前位置的源代碼」來查找關於此錯誤的一堆信息。也許你在Visual Studio的調試設置上擺弄? – sloth

相關問題