VB.Net / JSON - 反序列化

时间:2014-03-26 08:38:37

标签: json vb.net serialization

过去几个小时我一直在绞尽脑汁。

我发现您可以序列化数据,因此可以省去为每个单独的JSON值创建无休止的长.split命令的麻烦。因此,通过创建一个JsonHelper类来序列化和反序列化从ASP.net页面传递的JSON,我已经跟踪了很多人在SO和整个网络上所做的事情。

这是我的班级:

Public Class NewTaskOb
    Public Property Department As Integer
    Public Property Type As Integer
    Public Property AssignedTo As Integer
    Public Property Priority As Integer
    Public Property Title As String
    Public Property JobCode As Integer
    Public Property ParentTask As String
    Public Property DueDate As Date
    Public Property Scope As String
    Public Property Comment As String
    Public Property BudgetString As String
End Class

然后我有了这个:

<WebMethod()> Public Shared Function NewTaskRequest(task As String) As String

    Dim newTask As NewTaskOb = DeserializeJSON.JsonDeserialize(Of NewTaskOb)(task)

我的JSON根据jsonlint有效,但是当我通过值时,我会在Dim newTask行上放置一个断路器,当我将鼠标悬停在它上面时,它会说每个如果在表单上提交值,则值为空(Department = 0,Type = 0等)。

我尝试过使用DataContractJsonSerializerJsonHelperJavaScriptSerializer。请注意,我不想导入其他引用(即Newtonsoft.Json或类似内容)。我希望使用上述功能完成这项工作。

提前感谢您的帮助。

编辑(添加JSON字符串本身):

{
"NewTask": {
    "Department": "-1",
    "Type": "0",
    "AssignedTo": "0",
    "Priority": "-1",
    "Title": "",
    "JobCode": "-",
    "ParentTask": "-",
    "DueDate": "",
    "Scope": "",
    "Comment": "",
    "BudgetString": ""
    }
}

修改

在弄乱代码的同时,我又回到了JavaScriptSerializer,发现如果我将Dim data = jss.Deserialize(Of Object)(task)放在Dim data = jss.Deserialize(Of NewTaskOb)(task)的位置,那么当它逐步显示时会显示数据中的字典,包含带有数据的字段。

Dictionary showing JSON correctly http://imageshack.com/a/img401/1174/a9ju.png

知道如何将这些提取到类变量中吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

所以我在我的系统上测试你的程序并发现它有Dictionary&#34; 2。想象它可能意味着什么,我认为2可能意味着字典中嵌套了一个字典 - 这可以解释为什么你无法检索这些值。所以我编辑了,结束了这一行 - Dim taskData = jss.Deserialize(Of Dictionary(Of Object, Object))(task)。现在,当我运行它时,我已经输入Dim taskValues = taskData.Values,我可以使用它们各自的索引位置来引用每个值......

,即taskValues(0)= Department,taskValues(1)= Type等。

此外,我删除了将数据插入数据传输对象的行,从而消除了JSON中的"NewTask":嵌套,从而产生了这个JSON:

{
"Department": "-1",
"Type": "0",
"AssignedTo": "0",
"Priority": "-1",
"Title": "",
"JobCode": "-",
"ParentTask": "-",
"DueDate": "",
"Scope": "",
"Comment": "",
"BudgetString": ""
}