C#中的json格式字符串解析

如题,根据json字符串的难易程度,C#提供的对应解析方法也不同,现做简单的归类总结:

一,对于最简单的json类型,可以使用如下方法

1.使用JsonReader类,示例代码如下

string meetingInfo = @"{""meetingid"" : ""123"", ""meetingname"" : ""abc""}";
JsonReader reader = new JsonTextReader(new StringReader(meetingInfo));
while (reader.Read()) {
Console.WriteLine(reader.TokenType + "\n" + reader.ValueType + "\n" + reader.Value);
}

2.使用JObject类,示例代码如下:

string meetingInfo = @"{""meetingid"" : ""123"", ""meetingname"" : ""abc""}";
JObject jm = JObject.Parse(meetingInfo);
string[] meetings = jm.Properties().Select(item => item.Value.ToString()).ToArray();

二,对于复杂的json类型,使用如下方法

1.使用JArray类(主要针对数组形式的json字符串),示例代码如下:

stringresultInfo = @"[{"id":"123","name":"abc"},{"id":"234","name":"def"}]";
JArray jf = (JArray)JsonConvert.DeserializeObject(resultInfo);
fileid = jf[0]["id"].ToString();
filename = jf[0]["name"].ToString();

2.使用JObject类(主要是嵌套类型),示例代码如下:

string resultInfo = @"{"meeting":{"id":"123","name":"abc"}}";
JObject jo = (JObject)JsonConvert.DeserializeObject(resultInfo);
string zone = jo["meeting"]["id"].ToString();
string zone_en = jo1["meeting"]["name"].ToString();

三,使用Newtonsoft.Json命名空间下的方法,示例代码如下:

private bool GetParameters() {
try {
var q = JsonConvert.DeserializeObject<ProtocolTO>(parameters);
if (q == null) return false;
id = q.id;
action = q.action;
fileid = q.fileid;
meetingid = q.meetingid;
type = q.type;
sourceid = q.sourceid;
status = q.status;
} catch {
return false;
}
return true;
}
public class ProtocolTO {
public string id { get; set; }
public string meetingid { get; set; }
public string fileid { get; set; }
public string sourceid { get; set; }
public string app { get; set; }
public string status { get; set; }
public string action { get; set; }
public string type { get; set; }
}


附录

json格式:

1、对象是一个无序的“‘名称/值’对”集合。
  例子:表示人的一个对象:
  {"姓名" : "abc","年龄" : "20"}
2、数组是值(value)的有序集合。
  例子:学生对象
  {"学生" :[{"姓名" : "小明" , "年龄" : "15"},{"姓名" : "tom" , "年龄" : "16"}]}
  json 对象数组:[{"姓名" : "小明" , "年龄" : "15"},{"姓名" : "tom" , "年龄" : "16"}]
3、值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
4、字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。








  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果你在 C# 使用 JSON解析 JSON 字符串时,发现某些字段的反斜杠字符 `\` 被缺失了,这通常是因为 JSON 格式本身的特性。在 JSON ,反斜杠字符 `\` 被用作转义符号,用于转义一些特殊字符,如双引号 `"`、换行符 `\n` 等。因此,如果你在 JSON 字符串使用反斜杠字符本身,则需要对其进行转义,将其表示为 `\\`。 例如,如果你的 JSON 字符串包含一个字段值为 `"C:\Windows\System32"`,则应该将其表示为 `"C:\\Windows\\System32"`,否则在解析时反斜杠字符 `\` 可能会被视为转义符号,导致解析错误。 如果你已经得到了一个缺失了反斜杠字符的 JSON 字符串,可以尝试手动添加缺失的反斜杠字符。例如,将字符串的 `"C:\Windows\System32"` 修改为 `"C:\\Windows\\System32"` 后再进行解析。 另外,如果你使用的是 Newtonsoft.Json 库来解析 JSON 字符串,可以通过设置 `JsonSerializerSettings` 的 `StringEscapeHandling` 属性来控制字符串的反斜杠字符的处理方式。将其设置为 `StringEscapeHandling.Default` 将会自动将反斜杠字符进行转义,而将其设置为 `StringEscapeHandling.EscapeHtml` 则会将反斜杠字符视为普通字符,不进行转义。例如: ``` string jsonString = "{\"path\": \"C:\\\\Windows\\\\System32\"}"; JsonSerializerSettings settings = new JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.EscapeHtml }; JObject jsonObj = JsonConvert.DeserializeObject<JObject>(jsonString, settings); ``` 在上述代码,我们将 `StringEscapeHandling` 设置为 `EscapeHtml`,因此在解析时反斜杠字符将被视为普通字符,而不进行转义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值