将json转换为C#数组?

Joe*_*ani 30 c# arrays json winforms

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

string docText = webBrowser1.Document.Body.InnerText;
Run Code Online (Sandbox Code Playgroud)

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

Ica*_*rus 54

只需获取字符串并使用JavaScriptSerializer将其反序列化为本机对象.例如,有这个json:

string json = "[{Name:'John Simith',Age:35},{Name:'Pablo Perez',Age:34}]"; 
Run Code Online (Sandbox Code Playgroud)

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

public class Person
{
 public int Age {get;set;}
 public string Name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

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

JavaScriptSerializer js = new JavaScriptSerializer();
Person [] persons =  js.Deserialize<Person[]>(json);
Run Code Online (Sandbox Code Playgroud)

这是JavaScriptSerializer文档链接.

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


ken*_*n2k 6

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

他们的例子:

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);
Run Code Online (Sandbox Code Playgroud)


Jev*_*nov 6

using Newtonsoft.Json;
Run Code Online (Sandbox Code Playgroud)

在包控制台中安装这个类 这个类在所有 .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; }
}
Run Code Online (Sandbox Code Playgroud)

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

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


Kev*_*don 5

老问题,但如果使用 .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; }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)