在C#.NET中将JSON字符串解析为JSON对象

28

我有一个由我的 .NET SOAP Web 服务返回的 JSON 字符串。它如下所示:

{
 "checkrecord":
   [
     {
      "rollno":"abc2",
      "percentage":40,
      "attended":12,
      "missed":34
     }
  ],
 "Table1":[]
}

现在我想将这个字符串解析成JSON对象。我也读到了这里,他们使用了这行代码:

JObject jsonObj = JObject.Parse(json);

我能否通过用我的字符串名称替换“json”来执行相同的操作?还需要引用除NewtonSoft.dll之外的其他dll吗?

顺便说一句,这是完整的Web服务代码(链接)

4个回答

37

使用 new JavaScriptSerializer().Deserialize<object>(jsonString) 方法进行反序列化。

需要引用 System.Web.Extensions.dll 并导入以下命名空间:

命名空间:System.Web.Script.Serialization

更多信息请参见 MSDN


你不能直接将C#对象发送给客户端,需要对其进行序列化并结束它,然后在客户端代码中进行反序列化。 - Baz1nga
2
@capdragon:除非他是你的父亲。 - B. Clay Shannon-B. Crow Raven
@Baz1nga:我添加了System.Web.Extensions引用,然后加入了“using System.Web.Script.Serialization;”,但是这行代码:var bla = new JavaScriptSerializer.Deserialize<object>(jsonString);……在Deserialize上失败了,出现了可怕的红色“谁在那里?”。换句话说,这一行:var bla = new JavaScriptSerializer.在智能感知中没有任何提示;虽然它似乎知道JavaScriptSerializer是谁,但它不认为它有任何可用的方法。 - B. Clay Shannon-B. Crow Raven
你需要按照以下方式实例化一个JavaScriptSerializer类型对象,即 new JavaScriptSerializer()。否则我需要看到你的更多代码才能提供帮助。 - Baz1nga
@Demodave,在一行上实例化序列化器,然后在下一行调用通用函数。我使用答案中的语法遇到了同样的问题。 - adam0101
显示剩余7条评论

15

我看到这个问题很老,但这是我用来解决同样问题的解决方案,与其他方案相比需要更少的代码。

正如@Maloric在他回答这个问题时提到的:

var jo = JObject.Parse(myJsonString);

要使用JObject,您需要在类文件中添加以下内容

using Newtonsoft.Json.Linq;

1
由于某些原因,.NET的System.ObjectSystem.Json在UWP项目中不可用,所以这个方法非常有效。 - kayleeFrye_onDeck

6
除了JObject之外,System.Json.JsonValue也是一个弱类型JSON对象的选择。
它还有一个JsonValue blob = JsonValue.Parse(json);可供使用。该blob很可能是JsonObject类型,它派生自JsonValue,但也可能是JsonArray类型。如果需要了解,请检查blob.JsonType
回答您的问题,是的,您可以用保存JSON字符串的变量名称替换json。;-D
您应该将System.Json.dll添加到项目引用中。
-Jesse

只是为了澄清,对于任何试图在其系统上找到此.dll文件的人来说,看起来这是随 .Net 4.5 提供的 Silverlight dll。 - longda

3

既然您提到正在使用Newtonsoft.dll,那么您可以使用它的工具将JSON字符串转换为对象:

MyClass myClass = JsonConvert.DeserializeObject<MyClass>(your_json_string);

[Serializable]
public class MyClass
{
    public string myVar {get; set;}
    etc.
}

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