尝试在C#中将JSON字符串转换为对象。使用一个非常简单的测试案例:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
问题在于routes_list从未被设置,它是一个未定义的对象。有任何想法吗?
将您的Json复制并粘贴到json2csharp的文本框中,然后单击生成按钮。
将生成一个cs类,使用该cs文件如下:
var generatedcsResponce = JsonConvert.DeserializeObject(yourJson);
其中RootObject
是生成的cs文件的名称;
在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);
或者,您可以按照以下方式使用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 及以上版本
或者,您可以使用新的 System.Text.Json
库,如下所示,该库适用于 .Net Core 3.1 及更高版本:
...
var result = System.Text.Json.JsonSerializer.Deserialize<T>(jsonString);
其中T
是您的对象类型,与您的JSON字符串匹配。
首先,您必须包含类库,例如:
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);
}
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);
}
var jsonString = "{ \"test\":\"some data\" }";
...
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);
JavaScriptSerializer
而不是微软的版本,因为它只接受 WCF 的自定义 JSON 格式(例如,看起来像日期但没有用 DATE() 包围的日期字段会失败)。 - Brad ChristieJavaScriptSerializer
来完成这个任务,而且不会出现任何问题。我将在下面提供答案。 - AHAMED AAQIB