将JSON字符串转换为C#对象

235

尝试在C#中将JSON字符串转换为对象。使用一个非常简单的测试案例:

JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");

问题在于routes_list从未被设置,它是一个未定义的对象。有任何想法吗?


1
@Greg: 我实际上建议使用 JavaScriptSerializer 而不是微软的版本,因为它只接受 WCF 的自定义 JSON 格式(例如,看起来像日期但没有用 DATE() 包围的日期字段会失败)。 - Brad Christie
此外,请看一下这篇使用JavascriptSerializer在.NET中解析JSON对象的文章,它其实是一篇非常棒的教程。 - scatmoi
你从哪里获取JavaScriptSerializer?在我的C# .NET 3.5项目中无法识别它。 - B. Clay Shannon-B. Crow Raven
1
@B. Clay Shannon 这个对我有用,解决了我的问题 https://dev59.com/bWw05IYBdhLWcg3w11Mk - Fuzzybear
你可以使用JavaScriptSerializer来完成这个任务,而且不会出现任何问题。我将在下面提供答案。 - AHAMED AAQIB
17个回答

8

将您的Json复制并粘贴到json2csharp的文本框中,然后单击生成按钮。

将生成一个cs类,使用该cs文件如下:

var generatedcsResponce = JsonConvert.DeserializeObject(yourJson);

其中RootObject是生成的cs文件的名称;


1

在C#中将JSON字符串转换为对象。使用以下测试用例...对我来说有效。这里"MenuInfo"是我的C#类对象。

JsonTextReader reader = null;
try
{
    WebClient webClient = new WebClient();
    JObject result = JObject.Parse(webClient.DownloadString("YOUR URL"));
    reader = new JsonTextReader(new System.IO.StringReader(result.ToString()));
    reader.SupportMultipleContent = true;
}
catch(Exception)
{}

JsonSerializer serializer = new JsonSerializer();
MenuInfo menuInfo = serializer.Deserialize<MenuInfo>(reader);

需要 Newtonsoft.Json.dll / 引用,同意吗? - Nate Anderson

0

或者,您可以按照以下方式使用System.Text.Json库:

using System.Text.Json;
...
var options = new JsonSerializerOptions()
            {
                PropertyNameCaseInsensitive = true
            });
var result = JsonSerializer.Deserialize<List<T>>(json, options);

其中 T 是与您的 JSON 字符串匹配的对象类型。

System.Text.Json 可在以下版本中使用: .NET Core 2.0 及以上版本 .NET Framework 4.6.1 及以上版本


0

针对使用 .Net Core 3.1 或更新版本的用户

或者,您可以使用新的 System.Text.Json 库,如下所示,该库适用于 .Net Core 3.1 及更高版本:

...
var result = System.Text.Json.JsonSerializer.Deserialize<T>(jsonString);

其中T是您的对象类型,与您的JSON字符串匹配。


0

首先,您必须包含类库,例如:

using System.Runtime.Serialization.Json;

DataContractJsonSerializer desc = new DataContractJsonSerializer(typeof(BlogSite));
string json = "{\"Description\":\"Share knowledge\",\"Name\":\"zahid\"}";

using (var ms = new MemoryStream(ASCIIEncoding.ASCII.GetBytes(json)))
{
    BlogSite b = (BlogSite)desc.ReadObject(ms);
    Console.WriteLine(b.Name);
    Console.WriteLine(b.Description);
}

0
假设您有一个名为Student的类,它具有以下字段,并且具有一种将JSON作为输入并返回字符串Student Object的方法。我们可以在此处使用 JavaScriptSerializer 将JSON字符串转换为C#对象。 std 在此处是一个JSON字符串。
  public class Student
{
   public string FirstName {get;set:}
   public string LastName {get;set:}
   public int[] Grades {get;set:}
}

public static Student ConvertToStudent(string std)
{
  var serializer = new JavaScriptSerializer();

  Return serializer.Deserialize<Student>(std);
 }

0
让我们说:
var jsonString = "{ \"test\":\"some data\" }";

你可以按照以下方式使用新的 System.Text.Json 库,该库适用于 .Net Core 3.1 及更高版本:
...
var result = System.Text.Json.JsonSerializer.Deserialize<T>(jsonString);
Where T is your object type that matches your JSON string.

如果你不想定义一个“类型”,你可以这样使用它。
...
var result = System.Text.Json.JsonSerializer.Deserialize<dynamic>(jsonString);

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