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

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

问题是routes_list从未被设置;它是一个未定义的对象。什么好主意吗?


当前回答

使用动态对象JavaScriptSerializer。

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
dynamic item = serializer.Deserialize<object>("{ \"test\":\"some data\" }");
string test= item["test"];

//test Result = "some data"

其他回答

您可能不想仅仅将routes_list声明为对象类型。它没有。test属性,所以你不会得到一个很好的对象。在这里,您最好定义一个类或结构,或者使用dynamic关键字。

如果您真的希望这段代码像您所拥有的那样工作,您需要知道DeserializeObject返回的对象是string,object的泛型字典。下面是这样做的代码:

var json_serializer = new JavaScriptSerializer();
var routes_list = (IDictionary<string, object>)json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Console.WriteLine(routes_list["test"]);

如果你想使用dynamic关键字,你可以在这里阅读如何使用。

如果你声明一个类或结构,你可以调用Deserialize而不是像这样调用DeserializeObject:

class MyProgram {
    struct MyObj {
        public string test { get; set; }
    }

    static void Main(string[] args) {
        var json_serializer = new JavaScriptSerializer();
        MyObj routes_list = json_serializer.Deserialize<MyObj>("{ \"test\":\"some data\" }");
        Console.WriteLine(routes_list.test);

        Console.WriteLine("Done...");
        Console.ReadKey(true);
    }
}

正如tripletdad99所说

var result = JsonConvert.DeserializeObject<T>(json);

但如果你不想创建一个额外的对象,你可以用Dictionary来代替

var result = JsonConvert.DeserializeObject<Dictionary<string, string>>(json_serializer);

在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);

让我们假设你有一个名为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);
 }

或者,你可以使用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及以上版本