首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将JSON字符串转换为C#对象

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

Stack Overflow用户
提问于 2011-01-06 09:38:43
回答 8查看 786.8K关注 0票数 207

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

代码语言:javascript
复制
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");

问题是routes_list永远不会被设置;它是一个未定义的对象。有什么想法吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-01-06 09:53:02

看起来您正试图反序列化为一个原始对象。您可以创建一个表示要转换到的对象的类。这在处理较大的对象或JSON字符串的情况下最有用。

例如:

代码语言:javascript
复制
  class Test {

      String test; 

      String getTest() { return test; }
      void setTest(String test) { this.test = test; }

  }

那么你的反序列化代码应该是:

代码语言:javascript
复制
   JavaScriptSerializer json_serializer = new JavaScriptSerializer();
   Test routes_list = 
          (Test)json_serializer.DeserializeObject("{ \"test\":\"some data\" }");

有关更多信息,请参阅本教程:http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx

票数 134
EN

Stack Overflow用户

发布于 2013-02-16 06:04:26

或者,您可以使用Newtownsoft.Json库,如下所示:

代码语言:javascript
复制
using Newtonsoft.Json;
...
var result = JsonConvert.DeserializeObject<T>(json);

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

票数 270
EN

Stack Overflow用户

发布于 2011-01-06 09:51:03

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

如果您真的想让这段代码按原样工作,您需要知道DeserializeObject返回的对象是字符串、对象的通用字典。下面是这样做的代码:

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

如果要使用动态关键字you can read how here

如果你声明了一个类或结构,你可以调用反序列化而不是DeserializeObject,如下所示:

代码语言:javascript
复制
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);
    }
}
票数 58
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4611031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档