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

19 浏览
0 Comments

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

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

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

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

0
0 Comments

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

在上述内容中,问题的出现原因是声明的routes_list为一个object类型,它没有.test属性,因此无法获得一个完整的对象。解决方法可以是定义一个类或结构体,或者使用dynamic关键字。

如果要使代码按照您的方式工作,您需要知道DeserializeObject返回的对象是一个泛型的string,object字典。以下是使用这种方法的代码:

var json_serializer = new JavaScriptSerializer();
var routes_list = (IDictionary)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("{ \"test\":\"some data\" }");
        Console.WriteLine(routes_list.test);
        Console.WriteLine("Done...");
        Console.ReadKey(true);
    }
}

在这里不要使用`object routes_list`,而是使用`var`或明确指定routes_list为IDictionary

0
0 Comments

问题的出现原因是尝试将JSON字符串反序列化为原始对象。解决方法是创建一个表示要转换的对象的类,并使用该类进行反序列化。这在处理较大对象或JSON字符串的情况下非常有用。

例如,可以创建一个名为Test的类,其属性为test,然后进行反序列化操作。代码如下:

class Test {
    public string test { get; set; }
}
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
Test routes_list = json_serializer.Deserialize("{ \"test\":\"some data\" }");

在上述代码中,我们使用JavaScriptSerializer类将JSON字符串反序列化为Test对象。

有关更多信息,可以参考以下教程:[http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx](http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx)

此外,在指定的文章中还使用了自动属性(autoproperties)。需要注意的是,上述代码样例可能不起作用,因为DeserializeObject方法会引发异常。可以使用以下代码替代:

var routes_list = serializer.Deserialize("{\"test\":\"some data\"}");

此外,不需要使用getTest()和setTest()方法,属性test应该是public的。还有一位用户指出,这看起来更像是Java而不是C#的写法,因为setTest(String test)方法没有返回值。

还可以使用以下代码进行反序列化操作:

var routes_list = json_serializer.Deserialize("{ \"test\":\"some data\" }");

如果对于类对象的格式不确定,可以使用[http://json2csharp.com/](http://json2csharp.com/)这个链接将JSON字符串转换为正确的类。这个工具可以节省很多时间。

0
0 Comments

在处理C#中的JSON字符串时,我们通常需要将其转换为相应的C#对象。然而,C#并没有提供直接将JSON字符串转换为对象的内置功能。因此,我们需要使用第三方库来实现这个功能。

一个常用的第三方库是Newtonsoft.Json。通过使用这个库,我们可以很方便地将JSON字符串转换为C#对象。

具体的解决方法如下:

首先,我们需要在代码中引入Newtonsoft.Json库:

using Newtonsoft.Json;

然后,我们可以使用JsonConvert类的DeserializeObject方法来将JSON字符串转换为C#对象。代码如下:

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

在这里,我们需要将需要转换的C#对象的类型作为泛型参数传递给DeserializeObject方法,并将JSON字符串作为第二个参数传递给该方法。

需要注意的是,泛型参数T应该是与JSON字符串匹配的对象类型。这意味着,我们需要创建一个与JSON字符串结构相匹配的C#类。这个类可以是部分类,并不需要与完整的JSON响应完全一致,但是类的层次结构需要保持一致。

通过使用Newtonsoft.Json库,我们可以轻松地将JSON字符串转换为C#对象,使得我们可以更方便地处理JSON数据。这大大简化了我们在C#中处理JSON的工作。

总结起来,要将JSON字符串转换为C#对象,我们可以使用Newtonsoft.Json库的JsonConvert类的DeserializeObject方法。我们需要将需要转换的对象类型作为泛型参数传递给该方法,并将JSON字符串作为第二个参数传递给方法。

0