C# 如何直接从 JSON String 中提取特定值 ?
Posted DotNet
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 如何直接从 JSON String 中提取特定值 ?相关的知识,希望对你有一定的参考价值。
咨询区
有一个 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
等等。。。
回答区
可以看出你的 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);
可以使用 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
,眼花缭乱是不是哈
以上是关于C# 如何直接从 JSON String 中提取特定值 ?的主要内容,如果未能解决你的问题,请参考以下文章