Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何反序列化JSON数组_Vb.net_Json.net_Json Deserialization - Fatal编程技术网

Vb.net 如何反序列化JSON数组

Vb.net 如何反序列化JSON数组,vb.net,json.net,json-deserialization,Vb.net,Json.net,Json Deserialization,在这里,我很难反序列化json数组。该数组派生自以下类 Public Class PIValues Inherits List(Of PIValue) Public Sub New() End Sub End Class Public Class PIValue Private _PointName As String Private _value As Double Private _timeStamp As String

在这里,我很难反序列化json数组。该数组派生自以下类

Public Class PIValues
     Inherits List(Of PIValue)

     Public Sub New()
     End Sub
End Class

Public Class PIValue

     Private _PointName As String
     Private _value As Double
     Private _timeStamp As String

     Public Property PointName() As String
         Get
            PointName = _PointName
         End Get
          Set(value As String)
             _PointName = value
         End Set
     End Property
     Public Property TimeStamp() As String
        Get
            TimeStamp = _timeStamp
        End Get
        Set(value As String)
            _timeStamp = value
        End Set
    End Property

    Public Property Value() As Double
        Get
            Value = _value
        End Get
        Set(value As Double)
            _value = value
        End Set
    End Property
End Class
以上内容作为AssemblyName.PIValue和AssemblyName.PIValue保留,它们是同一解决方案的一部分

在“我的单元测试”中实现此代码会导致字符串
result
中包含以下json数组:

[{\“PointName\”:\“MW标记 1\“,”时间戳\“:\”20200128073000\“,”值\“:-0.0015},{\”点名\“:\”MW标记 2\“,”时间戳\“:\”20200128073000\“,”值\“:-0.0031},{\”点名\“:\”MW标记 3\“,”时间戳\“:\”20200128073000\“,”值\“:-2.1485},{\”点名\“:\”MW标记 4\“,”时间戳\“:”20200128073000\“,”值\“:0.0}]

我希望能够以以下方式使用newtonsoft库进行反序列化:

 Dim Items = Newtonsoft.Json.JsonConvert.DeserializeObject(Of PIValue())(result)
然而,这不起作用。我不熟悉使用newtonsoft库,如有任何帮助,将不胜感激

问候
Paul.

我们不知道您所说的“不工作”是什么意思,但此代码运行时没有错误,并发出与您提供的相同的JSON字符串:

Public Module Main
  Public Sub Main()
    Dim oPIValues1 As PIValues
    Dim oPIValues2 As PIValues
    Dim sResult As String

    oPIValues1 = New PIValues From {
      New PIValue With {.PointName = "MW Tag 1", .TimeStamp = "20200128073000", .Value = -0.0015},
      New PIValue With {.PointName = "MW Tag 2", .TimeStamp = "20200128073000", .Value = -0.0031},
      New PIValue With {.PointName = "MW Tag 3", .TimeStamp = "20200128073000", .Value = -2.1485},
      New PIValue With {.PointName = "MW Tag 4", .TimeStamp = "20200128073000", .Value = -0.0000}
    }

    sResult = JsonConvert.SerializeObject(oPIValues1)
    oPIValues2 = JsonConvert.DeserializeObject(Of PIValues)(sResult)

    Console.WriteLine(sResult)
    Console.ReadKey()
  End Sub
End Module



Public Class PIValues
  Inherits List(Of PIValue)
End Class



Public Class PIValue
  Public Property PointName As String
  Public Property TimeStamp As String
  Public Property Value As Double
End Class

好的。。。所以我使用了它,答案是:


Dim dser As List(Of PIValue)=JsonConvert.DeserializeObject(Of List(Of PIValue))(结果)

您的代码似乎有效。你说“不行”是什么意思?它是否抛出异常(如果是,请将异常消息添加到您的问题中)还是其他原因?“不起作用”不足以形成一个好的问题。你会想继续读下去。@InteXX和HeyJude-一旦我弄明白了语法,我实际上就成功了,因此我发布了一个问题的答案,但是从对我的答案的评论中你会看到,喜悦是短暂的,我现在从newtonsoft得到了一个铸造错误,
dser
列表的铸造(价值)
一般来说是一个很好的设计,但是对于这个特定的代码来说它不是必需的。
Dim dser=…
也是有效的,如果你将鼠标悬停在代码画布上的
dser
变量上,你会看到它收到一个隐含的强制转换。好的,说得太快了,现在得到一个强制转换错误:Newtonsoft.Json.JsonSerializationException:'Error将值“[{”PointName:“M~Mailer Creamery~33-11kV T1~11kV CB~MW~DA30”,“时间戳:“20200128130000”,“值”:2.536}]”转换为类型“System.Collections.Generic.List
1[SPEN.PIValue]“.Path”,第1行,位置117。“内部异常1:ArgumentException:无法从System.String强制转换或转换为System.Collections.Generic.List
1[SPEN.PIValue]…无法理解为什么它会在某一时刻工作,然后在下一时刻停止工作:-/@PaulJohnson,它实际上应该工作,如下所示。
PIValues
继承自
列表(PIValue)
,因此,虽然其中任何一个都可以工作,但转换为前者更可取。您提供的JSON字符串与HeyJude的.NET Fiddle配合使用。您是否尝试了我在回答中建议的代码?同样,您拒绝向我们提供必要的信息,然后要求我们帮助您解决数据不足的问题。您似乎喜欢这样做这样做;-)产生错误的代码是什么?