NET问答: 如何使用 C# 直接从 JSON String 中提取特定值 ?
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NET问答: 如何使用 C# 直接从 JSON String 中提取特定值 ?相关的知识,希望对你有一定的参考价值。
咨询区
Alon Shmiel:
我有一个 string,现在我想从中提取出一些值,格式大概如下:
string1:
"{\\r\\n \\"id\\": \\"100000280905615\\",
\\r\\n \\"name\\": \\"Jerard Jones\\",
\\r\\n \\"first_name\\": \\"Jerard\\",
\\r\\n \\"last_name\\": \\"Jones\\",
\\r\\n \\"link\\": \\"https://www.facebook.com/Jerard.Jones\\",
\\r\\n \\"username\\": \\"Jerard.Jones\\",
\\r\\n \\"gender\\": \\"female\\",
\\r\\n \\"locale\\": \\"en_US\\"\\r\\n}"
string2:
"{\\r\\n \\"id\\": \\"100000390001929\\",
\\r\\n \\"name\\": \\"\\\\u05d1\\\\u05d2\\\\u05e8\\\\u15dc\\\\u25d9 \\\\u05d1\\\\u05e8\\\\u05d5\\\\u05e9\\",
\\r\\n \\"first_name\\": \\"\\\\u05d4\\\\u05d2\\\\u05e7\\\\u02dc\\\\u05d9\\",
\\r\\n \\"last_name\\": \\"\\\\u05d1\\\\u05e8\\\\u05d5\\\\u05e9\\",
\\r\\n \\"link\\": "https://www.facebook.com/people/\\\\u05d2\\\\u05d1\\\\u05e@\\\\u05dc\\\\u05d9-\\\\u05d1\\\\u05e8\\\\u05d4\\\\u05e9/100000390001929\\",
\\r\\n \\"gender\\": \\"female\\",
\\r\\n \\"locale\\": \\"he_IL\\"\\r\\n}"
请问我如何从中提取 id
,first_name
,last_name
等等。。。
回答区
Rubens Mariuzzo:
可以看出你的 string 是一个 json 格式,你可以通过 JSON.NET
将它转为 object,下面是一个将 string 转为动态类型的小例子,仅供参考:
string source = "{\\r\\n \\"id\\": \\"100000280905615\\", \\r\\n \\"name\\": \\"Jerard Jones\\", \\r\\n \\"first_name\\": \\"Jerard\\", \\r\\n \\"last_name\\": \\"Jones\\", \\r\\n \\"link\\": \\"https://www.facebook.com/Jerard.Jones\\", \\r\\n \\"username\\": \\"Jerard.Jones\\", \\r\\n \\"gender\\": \\"female\\", \\r\\n \\"locale\\": \\"en_US\\"\\r\\n}";
dynamic data = JObject.Parse(source);
Console.WriteLine(data.id);
Console.WriteLine(data.first_name);
Console.WriteLine(data.last_name);
Console.WriteLine(data.gender);
Console.WriteLine(data.locale);
Ligabb:
可以使用 DataContractJsonSerializer
类帮你实现 string 到 object 的转换,首先定义如下类:
public class Data
{
public string Id {get; set;}
public string Name {get; set;}
public string First_Name {get; set;}
public string Last_Name {get; set;}
public string Username {get; set;}
public string Gender {get; set;}
public string Locale {get; set;}
}
我不敢100%保证,如果序列化不了,可以在字段上标注 [DataContract]
和 [DataMember]
,然后就可以序列化和反序列化的操作啦。
private static readonly XmlObjectSerializer Serializer = new DataContractJsonSerializer(typeof(Data));
// convert string to stream
byte[] byteArray = Encoding.UTF8.GetBytes(contents);
using(var stream = new MemoryStream(byteArray))
{
(Data)Serializer.ReadObject(stream);
}
点评区
从 jsonstring 中提取 value,逃不过使用 json序列化器,不过挺有意思的是:.NET曾出现过多个json序列化工具,比如:javascriptSerializer,还有针对 WCF 的 DataContractJsonSerializer,还有现在 .netcore3
出来的大一统 System.Text.Json.JsonSerializer
,眼花缭乱是不是哈????
以上是关于NET问答: 如何使用 C# 直接从 JSON String 中提取特定值 ?的主要内容,如果未能解决你的问题,请参考以下文章
NET问答: 如何将十六进制的 #FFDFD991 转成 C# 中的 Color 类?
NET问答: 如何使用 C# 比较两个 byte[] 的相等性 ?
NET问答: 不能从 appsettings.json 中以 string[] 形式读取?
如何从 ASP.net MVC 程序中获取纯 c# 程序中的 JSON 数据?