Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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
.net 反序列化json数组返回null_.net_Json_Vb.net_Serialization_Deserialization - Fatal编程技术网

.net 反序列化json数组返回null

.net 反序列化json数组返回null,.net,json,vb.net,serialization,deserialization,.net,Json,Vb.net,Serialization,Deserialization,嗯。。。。试图将json反序列化为“用户”列表,但无法使其工作。 以下是Json: [{“Aatrox”:{“版本”:“5.2.1”,“id”:“Aatrox”,“键”:“266”,“名称”:“Aatrox”,“标题”:“黑暗之刃”,“简介”:“阿特洛克斯是一位传奇战士,是一个被称为达金的古老种族仅存的五名战士之一。他优雅而稳重地挥舞着他的巨刃,以一种令人催眠的风格横扫军团。随着每个敌人的倒下,阿特洛克斯的……”,“信息”:{“攻击”:8,“防御”:4,“魔法”:3,“难度”:4},“图像”:{

嗯。。。。试图将json反序列化为“用户”列表,但无法使其工作。 以下是Json:

[{“Aatrox”:{“版本”:“5.2.1”,“id”:“Aatrox”,“键”:“266”,“名称”:“Aatrox”,“标题”:“黑暗之刃”,“简介”:“阿特洛克斯是一位传奇战士,是一个被称为达金的古老种族仅存的五名战士之一。他优雅而稳重地挥舞着他的巨刃,以一种令人催眠的风格横扫军团。随着每个敌人的倒下,阿特洛克斯的……”,“信息”:{“攻击”:8,“防御”:4,“魔法”:3,“难度”:4},“图像”:{“完整”:“阿特洛png”,“精灵”:”champion0.png,“group:“champion”,“x:”0,“y:”0,“w:”48,“h:”48},“tags:”战斗机“,”坦克“,”零件类型“,”血井“,”统计数据“{”hp:”537.8,“hpperlevel:”85.0,“mp:”105.6,“mpperlevel:”45.0,“movespeed:”345.0,“盔甲”:24.384,“装甲等级”:3.8,“法术块”:32.1,“法术封锁等级”:1.25,“攻击范围”:150.0,“hpregen:”6.59,“hpperlevel:”0.5,“mpregen:”0,“mpregenperlevel:0.0,“暴击”:0.0,“暴击”:0.0,“攻击伤害”:60.376,“攻击伤害”:3.2,“攻击速度偏移量”:-0.04,“攻击速度”:3.0}},“Ahri”:{“版本”:“5.2.1”,“id”:“Ahri”,“键”:“103”,“名称”:“Ahri”,“标题”:“九尾狐”,“宣传语”:与其他游荡在爱奥尼亚南部森林中的狐狸不同,阿赫里总是感觉到与她周围的魔法世界有一种奇怪的联系;这种联系在某种程度上是不完整的。在内心深处,她觉得她出生的皮肤不适合……,“信息”:{“攻击”:3,“防御”:4,“魔法”:8,“困难”:5},“图像”:{“完整”:“Ahri.png”,“精灵”:”champion0.png“,”组“:”冠军“,”x“,”y“,”w“,”48,“h“,”48},“标签“:”法师“,”刺客“,”角色类型“,”魔法“,”属性“:{”hp“,”514.4,“hpperlevel“,”80.0“,”mp“,”334.0“,”mpperlevel“,”50.0,“移动速度“,”330.0,“护甲“,”20.88,“盔甲等级“,”3.5,“法术块“,”30.0,“法术阻止等级“,”0.0,“攻击范围“,”550.0,“hpregen“,”6.6“,”mpregen“,”mpregenperlevel:0.8,“爆击”:0.0,“爆击等级”:0.0,“攻击伤害”:53.04,“攻击伤害等级”:3.0,“攻击速度偏移”:-0.065,“攻击速度等级”:2.0}}]

我正在使用的代码:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim chlist As ChampionName() = JsonConvert.DeserializeObject(Of ChampionName())(jsonString)

    TextBox1.Text += "Count: " & chlist.Count.ToString & vbNewLine

    For Each s As ChampionName In chlist
        TextBox1.Text += "Name: " & s.name & vbNewLine
    Next
End Sub
我试图传递数据的类:

    Public Class Info
Public Property attack() As Integer
    Get
        Return m_attack
    End Get
    Set
        m_attack = Value
    End Set
End Property
Private m_attack As Integer
Public Property defense() As Integer
    Get
        Return m_defense
    End Get
    Set
        m_defense = Value
    End Set
End Property
Private m_defense As Integer
Public Property magic() As Integer
    Get
        Return m_magic
    End Get
    Set
        m_magic = Value
    End Set
End Property
Private m_magic As Integer
Public Property difficulty() As Integer
    Get
        Return m_difficulty
    End Get
    Set
        m_difficulty = Value
    End Set
End Property
Private m_difficulty As Integer
    End Class

    Public Class Image
Public Property full() As String
    Get
        Return m_full
    End Get
    Set
        m_full = Value
    End Set
End Property
Private m_full As String
Public Property sprite() As String
    Get
        Return m_sprite
    End Get
    Set
        m_sprite = Value
    End Set
End Property
Private m_sprite As String
Public Property group() As String
    Get
        Return m_group
    End Get
    Set
        m_group = Value
    End Set
End Property
Private m_group As String
Public Property x() As Integer
    Get
        Return m_x
    End Get
    Set
        m_x = Value
    End Set
End Property
Private m_x As Integer
Public Property y() As Integer
    Get
        Return m_y
    End Get
    Set
        m_y = Value
    End Set
End Property
Private m_y As Integer
Public Property w() As Integer
    Get
        Return m_w
    End Get
    Set
        m_w = Value
    End Set
End Property
Private m_w As Integer
Public Property h() As Integer
    Get
        Return m_h
    End Get
    Set
        m_h = Value
    End Set
End Property
Private m_h As Integer
    End Class

    Public Class Stats
Public Property hp() As Double
    Get
        Return m_hp
    End Get
    Set
        m_hp = Value
    End Set
End Property
Private m_hp As Double
Public Property hpperlevel() As Double
    Get
        Return m_hpperlevel
    End Get
    Set
        m_hpperlevel = Value
    End Set
End Property
Private m_hpperlevel As Double
Public Property mp() As Double
    Get
        Return m_mp
    End Get
    Set
        m_mp = Value
    End Set
End Property
Private m_mp As Double
Public Property mpperlevel() As Double
    Get
        Return m_mpperlevel
    End Get
    Set
        m_mpperlevel = Value
    End Set
End Property
Private m_mpperlevel As Double
Public Property movespeed() As Double
    Get
        Return m_movespeed
    End Get
    Set
        m_movespeed = Value
    End Set
End Property
Private m_movespeed As Double
Public Property armor() As Double
    Get
        Return m_armor
    End Get
    Set
        m_armor = Value
    End Set
End Property
Private m_armor As Double
Public Property armorperlevel() As Double
    Get
        Return m_armorperlevel
    End Get
    Set
        m_armorperlevel = Value
    End Set
End Property
Private m_armorperlevel As Double
Public Property spellblock() As Double
    Get
        Return m_spellblock
    End Get
    Set
        m_spellblock = Value
    End Set
End Property
Private m_spellblock As Double
Public Property spellblockperlevel() As Double
    Get
        Return m_spellblockperlevel
    End Get
    Set
        m_spellblockperlevel = Value
    End Set
End Property
Private m_spellblockperlevel As Double
Public Property attackrange() As Double
    Get
        Return m_attackrange
    End Get
    Set
        m_attackrange = Value
    End Set
End Property
Private m_attackrange As Double
Public Property hpregen() As Double
    Get
        Return m_hpregen
    End Get
    Set
        m_hpregen = Value
    End Set
End Property
Private m_hpregen As Double
Public Property hpregenperlevel() As Double
    Get
        Return m_hpregenperlevel
    End Get
    Set
        m_hpregenperlevel = Value
    End Set
End Property
Private m_hpregenperlevel As Double
Public Property mpregen() As Double
    Get
        Return m_mpregen
    End Get
    Set
        m_mpregen = Value
    End Set
End Property
Private m_mpregen As Double
Public Property mpregenperlevel() As Double
    Get
        Return m_mpregenperlevel
    End Get
    Set
        m_mpregenperlevel = Value
    End Set
End Property
Private m_mpregenperlevel As Double
Public Property crit() As Double
    Get
        Return m_crit
    End Get
    Set
        m_crit = Value
    End Set
End Property
Private m_crit As Double
Public Property critperlevel() As Double
    Get
        Return m_critperlevel
    End Get
    Set
        m_critperlevel = Value
    End Set
End Property
Private m_critperlevel As Double
Public Property attackdamage() As Double
    Get
        Return m_attackdamage
    End Get
    Set
        m_attackdamage = Value
    End Set
End Property
Private m_attackdamage As Double
Public Property attackdamageperlevel() As Double
    Get
        Return m_attackdamageperlevel
    End Get
    Set
        m_attackdamageperlevel = Value
    End Set
End Property
Private m_attackdamageperlevel As Double
Public Property attackspeedoffset() As Double
    Get
        Return m_attackspeedoffset
    End Get
    Set
        m_attackspeedoffset = Value
    End Set
End Property
Private m_attackspeedoffset As Double
Public Property attackspeedperlevel() As Double
    Get
        Return m_attackspeedperlevel
    End Get
    Set
        m_attackspeedperlevel = Value
    End Set
End Property
Private m_attackspeedperlevel As Double
    End Class

    Public Class ChampionName
Public Property version() As String
    Get
        Return m_version
    End Get
    Set
        m_version = Value
    End Set
End Property
Private m_version As String
Public Property id() As String
    Get
        Return m_id
    End Get
    Set
        m_id = Value
    End Set
End Property
Private m_id As String
Public Property key() As String
    Get
        Return m_key
    End Get
    Set
        m_key = Value
    End Set
End Property
Private m_key As String
Public Property name() As String
    Get
        Return m_name
    End Get
    Set
        m_name = Value
    End Set
End Property
Private m_name As String
Public Property title() As String
    Get
        Return m_title
    End Get
    Set
        m_title = Value
    End Set
End Property
Private m_title As String
Public Property blurb() As String
    Get
        Return m_blurb
    End Get
    Set
        m_blurb = Value
    End Set
End Property
Private m_blurb As String
Public Property info() As Info
    Get
        Return m_info
    End Get
    Set
        m_info = Value
    End Set
End Property
Private m_info As Info
Public Property image() As Image
    Get
        Return m_image
    End Get
    Set
        m_image = Value
    End Set
End Property
Private m_image As Image
Public Property tags() As List(Of String)
    Get
        Return m_tags
    End Get
    Set
        m_tags = Value
    End Set
End Property
Private m_tags As List(Of String)
Public Property partype() As String
    Get
        Return m_partype
    End Get
    Set
        m_partype = Value
    End Set
End Property
Private m_partype As String
Public Property stats() As Stats
    Get
        Return m_stats
    End Get
    Set
        m_stats = Value
    End Set
End Property
Private m_stats As Stats
    End Class

    Public Class RootObject
Public Property ChampionName() As ChampionName
    Get
        Return m_ChampionName
    End Get
    Set
        m_ChampionName = Value
    End Set
End Property
Private m_ChampionName As ChampionName
    End Class
我没有得到任何错误,但也不是期望的结果。 以下是输出:


非常感谢您的帮助!

从VS2010开始,您的类实际上只需要自动属性;这使它们的编码和阅读更加简单:

Public Class Info
    Public Property attack As Integer
    Public Property defense As Integer
    Public Property magic As Integer
    Public Property difficulty As Integer
End Class
... etc
最后一个是根对象

Public Class Players
    Public Property Aatrox As Champion
    Public Property Ahri As Champion
End Class
这些将用于反序列化数组或
列表(玩家)

如果您想要阵列,请执行以下操作:

Dim obj = JsonConvert.DeserializeObject(Of Players())(jstr)
无论哪种方式,最终都会得到一个包含1个玩家项目的数组/列表,其中包含
Ahri
Aatrox
属性对象


这个json有点傻,因为外部的
[
强制将结果放入一个数组中。
“Aatrox”:{…},“Ahri”:{…}
应该允许您反序列化到一个可以迭代的字典,但是
[…]
意味着我们必须将其放入一个数组中:

Dim temp = JsonConvert.DeserializeObject(Of Dictionary(Of String, Player)())(jstr)
' extract the player dictionary:
Dim players As Dictionary(Of String, Player) = temp(0)
For Each kvp As KeyValuePair(Of String, Player) In players
    Console.WriteLine("Name: {0} Title: {1}",
                      kvp.Key, kvp.Value.title)
Next
每个的键将是名称,值将是
Player
类对象:

Dim hp = players("Ahri").stats.hp 

我的想法是,由于所有对象都具有相同的属性,我可以将json反序列化为一个数组,然后循环遍历它并获取数据(生成的表单:包含ChampionName类。我将尝试您的建议!感谢您的帮助,伙计!您的ChampionName类只是一般的Aatrox和Ahri类版本(现在有意义了)-这就是我最后所说的播放器。是的,我目前正在编写没有任何转换器/生成器的类,并将再次测试它。json包含100多个对象,因此我必须将它们全部添加到RootObject中?我不能只使用一个对象并将对象传递到数组中吗?我认为如果json文件得到更新会更好。不幸的是,我不能这不是JSON的构造方式。即使每个参与者都有相同的属性集,RootObject也会单独指定它们。反序列化的内容/方式取决于它的序列化/编码方式。在执行此操作的过程中,您可以“解包”“将它们添加到列表中。请确保单击此帮助的复选标记以了解如何循环对象?此类的目的是检查每个名称,如果它与从另一个json(已获取该部分)获取的名称相同,则获取图像(或任何其他数据)并从web检索图像。
Dim hp = players("Ahri").stats.hp