将 Json 对象转换为数据表和字符串

Posted

技术标签:

【中文标题】将 Json 对象转换为数据表和字符串【英文标题】:Json Object into a datatable and a string 【发布时间】:2013-11-01 08:44:38 【问题描述】:

我通过 http post 在 asp.net 中收到了以下 json:

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

我只需要将联系人下的数据放入数据表中,并将标题下的数据反序列化为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

现在您可以轻松访问所需的值,例如 data.Header.MCC 等。

请注意,我在Header 类上使用了DataContract/DataMember,否则反序列化程序无法知道REG ID 应该映射到RegId(因为你不能拥有成员VB.Net 中带空格的名称)。

如果你真的想为你的联系人使用DataTable,只需将Data.Contacts 声明为DataTable

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

【讨论】:

我知道当前位置没有可用的源代码 @JocelyneElKhoury 此错误与此代码无关。尝试谷歌搜索no source code available for the current location 以查找有关此错误的大量信息。也许你在 Visual Studio 的调试设置上摆弄?

以上是关于将 Json 对象转换为数据表和字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据实体转换为 JSON 字符串

如何将数据实体转换为 JSON 字符串

js 将json字符串转换为json对象的方法解析

Jackson 对象和JSON的相互转换

js 将json字符串转换为json对象的方法解析(转)

js 将json字符串转换为json对象的方法解析