将 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# 函数是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章