【问题标题】:Converting a string to JSON in C#在 C# 中将字符串转换为 JSON
【发布时间】:2017-02-04 23:52:41
【问题描述】:

我正在尝试使用Simple JSON 将此字符串转换为 JSON:

"{\"objects\":[{\"id\":1,\"title\":\"Book\",\"position_x\":0,\"position_y\":0,\"position_z\":0,\"rotation_x\":0,\"rotation_y\":0,\"rotation_z\":0,\"created\":\"2016-09-21T14:22:22.817Z\"},{\"id\":2,\"title\":\"Apple\",\"position_x\":0,\"position_y\":0,\"position_z\":0,\"rotation_x\":0,\"rotation_y\":0,\"rotation_z\":0,\"created\":\"2016-09-21T14:22:52.368Z\"}]}"

不幸的是,Visual Studio 似乎没有交互式调试控制台。例如,将调试器放在一行上,然后在实时交互式控制台中单步执行该部分代码。否则我可以在哪里试验 SimpleJSON 的库,看看如何使它工作。无论如何,如果我错了,请纠正我!

虽然那是不可能的,但有人知道如何做到这一点吗?我试过这个:

JSONData jsonData = new JSONData(my_json_string);

但这会更多地转义字符串并将其保留为字符串:

"\"{\\\"objects\\\":[{\\\"id\\\":1,\\\"title\\\":\\\"Book\\\",\\\"position_x\\\":0,\\\"position_y\\\":0,\\\"position_z\\\":0,\\\"rotation_x\\\":0,\\\"rotation_y\\\":0,\\\"rotation_z\\\":0,\\\"created\\\":\\\"2016-09-21T14:22:22.817Z\\\...

我是 C# 新手,但我很惊讶 C# 没有任何原生功能可以让解析 JSON 等常见的东西更容易访问。有吗?

【问题讨论】:

  • 那个字符串是json。 JSon 不是什么神奇的对象,它是一种字符串可以是的格式,在这种情况下,您可以将该字符串称为 json 字符串。它转义更多的原因是因为它试图将输入的字符串格式化为 json,以便在反序列化时再次获得输入。
  • “但是这会更多地转义字符串并保持字符串”,不正确,请参阅this post。您可以在调试时使用中间窗口来测试您的代码。
  • 使用 Newtonsoft JSON 序列化和反序列化 JSON。这很容易且有据可查。
  • @Glubus 但我不能只对字符串执行object[0]
  • 没错,因为 json 不是对象。如果您想将该 json 字符串 convert 转换为 object,那么您需要 deserialize 该字符串,例如通过一个库来实现。

标签: c# json simplejson


【解决方案1】:

首先,创建您的数据模型。您可以使用json2sharp,非常有用的工具。

public class Item
{
    public int id { get; set; }
    public string title { get; set; }
    public int position_x { get; set; }
    public int position_y { get; set; }
    public int position_z { get; set; }
    public int rotation_x { get; set; }
    public int rotation_y { get; set; }
    public int rotation_z { get; set; }
    public string created { get; set; }
}

接下来使用Newtonsoft.Json 并调用反序列化方法。

var list = JsonConvert.DeserializeObject<List<Item>>(Yourjson);

【讨论】:

  • 关于 json2csharp 的注意事项 - 它是救生员,我已经很多使用过它。 VS(那些使用它的人)中还内置了一个有用且鲜为人知的工具。将 JSON 复制到剪贴板,然后创建/打开代码文件。单击Edit > Paste Special > Paste JSON As Classes。做同样的工作,直接在 IDE 中 :) 还有一个 XML As Classes 选项
【解决方案2】:

题问如何将字符串转成JSON对象……这可以不用Class或者数据模型来实现,如下:

using Newtonsoft.Json;

string str = "{\"objects\":[{\"id\":1,\"title\":\"Book\",\"position_x\":0,\"position_y\":0,\"position_z\":0,\"rotation_x\":0,\"rotation_y\":0,\"rotation_z\":0,\"created\":\"2016-09-21T14:22:22.817Z\"},{\"id\":2,\"title\":\"Apple\",\"position_x\":0,\"position_y\":0,\"position_z\":0,\"rotation_x\":0,\"rotation_y\":0,\"rotation_z\":0,\"created\":\"2016-09-21T14:22:52.368Z\"}]}";
dynamic json = JsonConvert.DeserializeObject(str);

现在,您可以按如下方式访问 json 内容:

json["objects"][0]["title"];

returns "Book"

您可以在其中使用 C# 代码的“交互式调试控制台”的一个选项是 Xamarin Workbooks... microsoft.com/en-us/xamarin/tools/workbooks/

Xamarin 工作簿提供文档和代码的混合,非常适合实验、学习和创建...等等等等

【讨论】:

  • 使用dynamic 比使用var 有什么优势?
  • @ahong,他们服务于不同的目的。当您可以在编译时确定类型时使用 Var。使用动态,然后在运行时动态确定/生成类型
【解决方案3】:

您尝试过系统实用程序吗?

喜欢这个https://msdn.microsoft.com/ru-ru/library/system.json.jsonvalue.parse%28v=vs.95%29.aspx

你可以使用

public static JsonValue Parse(string jsonString)

JsonValue 类,然后转换为 jsonobject 或任何你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多