如何从字符串形式的 JSON 中读取值

4

我有一个问题。我尝试从JSON中获取值。JSON通过socket从服务器发送。在客户端,我得到了像这样的东西:

            string data = null;
            // Receive the response from the remote device.  
            int bytesRec = sender.Receive(bytes);
            data += Encoding.ASCII.GetString(bytes, 0, bytesRec);
            Console.WriteLine(data);
            Console.ReadLine();

在控制台中我看到:
{"player":0, "size":3}

如何从此字符串中获取值?

4
{"player":0 "size":3} 不是有效的 JSON,应该是 {"player":0, "size":3} - KuKeC
是的,没错,拼写错误。 - artist
1
如果您可以承受外部库的开销,请考虑使用 JSON.Net - StaticBeagle
你尝试过使用JsonConvert.DeserializeObject<YourModel>(data)吗? - monstertjie_za
4个回答

9
很简单。首先通过“包管理器控制台”下载此NuGet:
Install-Package Newtonsoft.Json -Version 11.0.2

然后添加这个命名空间:Newtonsoft.Json.Linq

JObject jObject = JObject.Parse(data);

int player = jObject["player"].Value<int>();

2

You could create a class:

public class MyObject
{
    public int Player {get; set;}
    public int Size {get; set;}
} 

然后使用类似于JSON.NET的工具来反序列化JSON字符串:

MyClass myClassObject = JsonConvert.DeserializeObject<MyObject>(data);
var playerId = myClassObject.Player;

2
  1. 创建一个用于该JSON的类。

最简单的方法是使用Visual Studio:将JSON文本复制到剪贴板中,然后选择Edit | Paste Special | Paste JSON as classes。根据需要重命名类(例如,此示例称其为Demo)。

  1. Newtonsoft.Json添加到项目的NuGet引用中。
  2. 通过Demo result = JsonConvert.DeserializeObject<Demo>("{\"player\":0, \"size\":3}");进行反序列化。

示例控制台应用程序:

using System;
using Newtonsoft.Json;

namespace Demo
{
    public class Demo
    {
        public int player { get; set; }
        public int size { get; set; }
    }

    class Program
    {
        static void Main()
        {
            Demo result = JsonConvert.DeserializeObject<Demo>("{\"player\":0, \"size\":3}");

            Console.WriteLine(result.player); // "0"
            Console.WriteLine(result.size);   // "3"
        }
    }
}

0

添加JSON.net的Nuget包:

在Nuget包管理器中搜索“Newtonsoft.Json”。

或者使用控制台:

Install-Package Newtonsoft.Json

安装完成后,您可以使用以下代码来创建匿名类型:

using Newtonsoft.Json;

var anonymousTypeDefinition = new { player = -1, size = -1 };
var player = JsonConvert.DeserializeAnonymousType(data, anonymousTypeDefinition);

或者您可以使用以下代码进行强类型转换:

public class Player
{
    int Size { get; set; }
    int Player { get; set; }
}

// in the console
var player = Newtonsoft.Json.JsonConvert.DeserializeObject<Player>(data);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接