如何使用VB.net?

时间:2015-04-22 23:17:03

标签: json vb.net

所以,我正在研究一个学校项目,我正在试图找出处理这个包含大量JSON对象的数据文件的最佳方法。我知道VB.net的基础知识,基本的事件处理等等。

我知道设计Structures的基础知识,以及类似的东西,但我需要弄清楚如何解析和创建一个包含以下条目的5MB JSON文件中的对象列表:

{
    "Air Elemental":{
        "layout":"normal",
        "name":"Air Elemental",
        "manaCost":"{3}{U}{U}",
        "cmc":5,
        "colors":[
            "Blue"
        ],
        "type":"Creature — Elemental",
        "types":[
            "Creature"
        ],
        "subtypes":[
            "Elemental"
        ],
        "text":"Flying",
        "power":"4",
        "toughness":"4",
        "imageName":"air elemental"
    },
    "Ancestral Recall":{
        "layout":"normal",
        "name":"Ancestral Recall",
        "manaCost":"{U}",
        "cmc":1,
        "colors":[
            "Blue"
        ],
        "type":"Instant",
        "types":[
            "Instant"
        ],
        "text":"Target player draws three cards.",
        "imageName":"ancestral recall"
    },
    "Animate Artifact":{
        "layout":"normal",
        "name":"Animate Artifact",
        "manaCost":"{3}{U}",
        "cmc":4,
        "colors":[
            "Blue"
        ],
        "type":"Enchantment — Aura",
        "types":[
            "Enchantment"
        ],
        "subtypes":[
            "Aura"
        ],
        "text":"Enchant artifact\nAs long as enchanted artifact isn't a creature, it's an artifact creature with power and toughness each equal to its converted mana cost.",
        "imageName":"animate artifact"
    }
}

如果有人可以提供帮助,或者只是指出我正确的方向,我真的很感激。我认为最让我失望的部分是每个卡片名称本身就是一个密钥,所有卡片的数据都是与“密钥”名称相关的值...

2 个答案:

答案 0 :(得分:1)

VS 2013中有一个很棒的功能,在编辑菜单下称为“粘贴为JSON”,因此请复制您的JSON字符串并选择此功能。

请注意,我以向声明数组的方式向MS报告了一个小错误。它给你的文字将是

Public Property x() as DataType

但是需要将其更改为

Public Property x as DataType()

以便正确声明为数组。

答案 1 :(得分:1)

在这种情况下,由于它们的结构方式相同,因此几乎无关紧要:

Public Class Spell
    Public Property layout As String
    Public Property name As String
    Public Property manaCost As String
    Public Property cmc As Integer
    Public Property colors As String()
    Public Property type As String
    Public Property types As String()
    Public Property subtypes As String()
    Public Property text As String
    Public Property power As String
    Public Property toughness As String
    Public Property imageName As String
End Class

我不知道数据代表什么,它看起来像一些奇幻游戏。当反序列化时(我使用Newtonsoft),你将得到一个法术词典,其关键是" Air Elemental"和#34; Animate Artifact"等等只需一行代码:

Dim jstr As String = from whereever   
Dim mySpells = JsonConvert.DeserializeObject(Of Dictionary(Of String, Spell))(jstr)

使用NET JavaScriptSerializer大致相同:

Dim jss As New JavaScriptSerializer
Dim myspells = jss.DeserializeObject(jstr)

您可以使用http://jsonutils.com/,甚至在VS中使用Paste Special来帮助解析结构(类,真正)需要的样子。但是,使用你的大脑并观察它们是值得的。机器人将为该JSON创建3个类,并为另一个类容器创建它们。如果有100个,那就不必要了。

由于每个项目都相同,因此可以为每个项目使用JSON一个类别。由于JSON格式化为适应,标准的.NET字典工作正常。