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}"

请问我如何从中提取 idfirst_namelast_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 数据?

NET问答: String 和 string 到底有什么区别?

如何在 C# Asp.Net 中从相当复杂的 Json 响应中创建 Dto