将 JSON 字符串解析为对象的最简单的 C# 函数是啥? [关闭]

Posted

技术标签:

【中文标题】将 JSON 字符串解析为对象的最简单的 C# 函数是啥? [关闭]【英文标题】:What is the simplest C# function to parse a JSON string into an object? [closed]将 JSON 字符串解析为对象的最简单的 C# 函数是什么? [关闭] 【发布时间】:2011-02-21 00:45:48 【问题描述】:

将 JSON 字符串解析为对象并显示它的最简单的 C# 函数是什么(C# XAML WPF)? (例如具有 2 个数组的对象 - arrA 和 arrB)

【问题讨论】:

【参考方案1】:

只需使用Json.NET 库。它可以让你非常轻松地解析 Json 格式的字符串:

JObject o = JObject.Parse(@"

    ""something"":""value"",
    ""jagged"":
    
        ""someother"":""value2""
    
");

string something = (string)o["something"];

文档:Parsing JSON Object using JObject.Parse

【讨论】:

Json.NET 是一个经过测试并证明非常灵活和高效的专业库。强烈推荐。 据我所知,这是允许通用对象类型解析的唯一选项,其他答案绑定到某个对象类型。 很好的解决方案。虽然对我来说像这样JToken something = o["something"]; 如果您需要为一件事解析 json,有时拉入外部库似乎很愚蠢。在这里使用 DataContractJsonSerializer 是一种更实用的方法。这就像引入 EntityFramework,因为您的应用程序确实执行了一些数据库查询。 使用System.Text.Json,我们可以做到JsonDocument doc = JsonDocument.Parse(JsonString);【参考方案2】:
DataContractJsonSerializer serializer = 
    new DataContractJsonSerializer(typeof(YourObjectType));

YourObjectType yourObject = (YourObjectType)serializer.ReadObject(jsonStream);

您也可以使用javascriptSerializer,但DataContractJsonSerializer 应该能够更好地处理复杂类型。

奇怪的是,JavaScriptSerializer 曾经被弃用(在 3.5 中),然后由于 ASP.NET MVC(在 3.5 SP1 中)而复活。这绝对足以动摇我的信心并引导我使用DataContractJsonSerializer,因为它很难用于 WCF。

【讨论】:

我会在框架生命周期早期构建的序列化程序上使用它。 你必须先添加一个引用然后using System.Runtime.Serialization.Json;【参考方案3】:

我想这就是你想要的:

JavaScriptSerializer JSS = new JavaScriptSerializer();
T obj = JSS.Deserialize<T>(String);

【讨论】:

我需要添加对System.Web.Extensions 的引用才能看到这个 T 必须是特定类型,不是吗?我不能只解析一个随机的 JSON 字符串。【参考方案4】:

您应该创建一个表示 JSON 键的结构(如果您确切知道它),然后您可以轻松地将 JSON 字符串反序列化到您的结构中。在我的示例中,我反序列化了来自 Google Cloud 消息服务器的响应:

class templateResponse

    public String multicast_id;
    public String success;
    public String failure;
    public String canonical_ids;
    public Result[] results;

    public class Result
    
        public String message_id;
        public String registration_id;
        public String error;
    ;

传入的 JSON 是:

"\"multicast_id\":7400896764380883211,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[\"message_id\":\"0:1351777805148960%39895cf0f9fd7ecd\"]"

所以,使用

templateResponse result = new JavaScriptSerializer().Deserialize<templateResponse>(json);

你会得到反序列化的result对象

【讨论】:

示例 JSON 和相关类很有帮助,谢谢。【参考方案5】:

我会回应 Json.NET 库,它可以将 JSON 响应转换为 XML 文档。使用 XML 文档,您可以轻松地使用 XPath 查询并提取您需要的数据。我觉得这很有用。

【讨论】:

以上是关于将 JSON 字符串解析为对象的最简单的 C# 函数是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

c# json数据解析——将字符串json格式数据转换成对象

如何解析会导致非法 C# 标识符的 JSON 字符串?

解析 JSON 响应的最简单方法

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

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

如何使用 C# 将 JSON 对象解析为类