将 json 转换为 C# 数组?

Posted

技术标签:

【中文标题】将 json 转换为 C# 数组?【英文标题】:Convert json to a C# array? 【发布时间】:2012-03-24 02:26:31 【问题描述】:

有谁知道如何将包含 json 的字符串转换为 C# 数组。我有这个从 webBrowser 读取 text/json 并将其存储到字符串中。

string docText = webBrowser1.Document.Body.InnerText;

只需要以某种方式将该 json 字符串更改为一个数组。一直在查看 Json.NET,但我不确定这是否是我需要的,因为我不想将数组更改为 json;但反过来。感谢您的帮助!

【问题讨论】:

您的字符串不必是数组,也可以是散列。还有什么数组?你的字符串是什么样的,你希望结果是什么?你想达到什么目的。 Parse JSON in C# 的可能重复项 【参考方案1】:

只需获取字符串并使用 javascriptSerializer 将其反序列化为原生对象。例如,有这个 json:

string json = "[Name:'John Simith',Age:35,Name:'Pablo Perez',Age:34]"; 

您需要创建一个名为的 C# 类,例如,Person 定义如下:

public class Person

 public int Age get;set;
 public string Name get;set;

您现在可以通过执行以下操作将 JSON 字符串反序列化为 Person 数组:

JavaScriptSerializer js = new JavaScriptSerializer();
Person [] persons =  js.Deserialize<Person[]>(json);

这是link to JavaScriptSerializer documentation。

注意:我上面的代码没有经过测试,但这就是想法 测试了它。除非您正在做一些“异国情调”的事情,否则使用 JavascriptSerializer 应该没问题。

【讨论】:

谢谢!你知道 JavascriptSerializer 使用什么命名空间吗?收到“找不到”错误。 是的,它在我链接的文档中。它在 System.Web.Script.Serialization 中。您需要添加对 System.Web.Extensions 程序集的引用。 啊,谢谢。得到它的工作。认为它是“JavaScriptSerializer”而不是“JavascriptSerializer”。这就是我收到该错误的原因。您可能想要编辑它。 :) @JoeyMorani 对此感到抱歉。我会编辑它。当然,当我在本地测试时,VS为我纠正了,我没有意识到。 :S 感谢您提供了一个非常简单的解决方案来解决应该是并且结果是一个简单的问题。其他解决方案似乎烧掉了几十行代码,我无法让它们工作。【参考方案2】:

是的,Json.Net 正是您所需要的。您基本上想将 Json 字符串反序列化为 objects 的数组。

见their examples:

string myJsonString = @"
  "Name": "Apple",
  "Expiry": "\/Date(1230375600000+1300)\/",
  "Price": 3.99,
  "Sizes": [
    "Small",
    "Medium",
    "Large"
  ]
";

// Deserializes the string into a Product object
Product myProduct = JsonConvert.DeserializeObject<Product>(myJsonString);

【讨论】:

【参考方案3】:
using Newtonsoft.Json;

在包控制台中安装这个类 此类在所有 .NET 版本中都可以正常工作,例如在我的项目中:我有 DNX 4.5.1 和 DNX CORE 5.0,一切正常。

首先在JSON反序列化之前,需要声明一个类可以正常读取,并在某处存储一些数据 这是我的课:

public class ToDoItem

    public string text  get; set; 
    public string complete  get; set; 
    public string delete  get; set; 
    public string username  get; set; 
    public string user_password  get; set; 
    public string eventID  get; set; 

在通过 GET 请求请求数据的 HttpContent 部分 例如:

HttpContent content = response.Content;
string mycontent = await content.ReadAsStringAsync();
//deserialization in items
ToDoItem[] items = JsonConvert.DeserializeObject<ToDoItem[]>(mycontent);

【讨论】:

【参考方案4】:

老问题,但如果使用 .NET Core 3.0 或更高版本,值得添加答案。 JSON序列化/反序列化内置在框架(System.Text.Json)中,因此您不必再使用第三方库。这是一个基于@Icarus 给出的最佳答案的示例

using System;
using System.Collections.Generic;

namespace ConsoleApp

    class Program
    
        static void Main(string[] args)
        
            var json = "[\"Name\":\"John Smith\", \"Age\":35, \"Name\":\"Pablo Perez\", \"Age\":34]";

            // use the built in Json deserializer to convert the string to a list of Person objects
            var people = System.Text.Json.JsonSerializer.Deserialize<List<Person>>(json);

            foreach (var person in people)
            
                Console.WriteLine(person.Name + " is " + person.Age + " years old.");
            
        

        public class Person
        
            public int Age  get; set; 
            public string Name  get; set; 
        
    

【讨论】:

【参考方案5】:

其他响应中未涵盖的一种情况是您不知道 JSON 对象包含的类型。这就是我的情况,因为我需要能够不输入并保持动态。

var objectWithFields =  js.Deserialize<dynamic[]>(json);

注意:绝对首选有一个类型,在某些情况下,这是不可能的,这就是我添加这个答案的原因。

【讨论】:

以上是关于将 json 转换为 C# 数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 c# 二维数组转换为 JSON 对象?

怎样将json数据转换成匿名数组或者泛型对象(c#)

将图像数组转换为 JSON 文件并在 C# 之后对其进行解码

Unity C#:如何将类的数组转换为 JSON [重复]

如何将 c# 数组转换为 JSON,其中一个数组项属性值设置为对另一个项的引用

怎样用C#把JSON数据转换为list或数组