如何在Visual Studio测试中用Newton JSON和C#验证JSON对象及数据
JSON验证问题解决方案
1. 修复ReadMyJsonFile读取方法
原方法未将读取到的JSON内容赋值给返回变量,导致返回空字符串,修正如下:
public string ReadMyJsonFile(string filePath) { // 直接读取并返回文件内容,简化实现 using (StreamReader reader = new StreamReader(filePath)) { return reader.ReadToEnd(); } } // 更简洁的替代方案(需引用System.IO) public string ReadMyJsonFile(string filePath) { return File.ReadAllText(filePath); }
2. 验证Details字段是否存在且值为XYZG
无需转字符串统计,直接通过JObject的字段访问或SelectToken验证:
// 方式1:直接索引访问(适合顶层字段) if (testobject != null && testobject.ContainsKey("Details")) { string detailsValue = testobject["Details"].Value<string>(); if (detailsValue == "XYZG") { Console.WriteLine("Details字段存在且值为XYZG"); } else { Console.WriteLine("Details字段存在但值不符"); } } else { Console.WriteLine("Details字段不存在"); } // 方式2:使用SelectToken(支持嵌套字段场景) var detailsToken = testobject.SelectToken("$.Details"); if (detailsToken != null && detailsToken.Value<string>() == "XYZG") { Console.WriteLine("Details字段存在且值为XYZG"); }
3. 修复Id字段的验证逻辑
原代码错误地将JSON路径表达式$..Id作为比较值,正确逻辑是定位字段后与实际预期值(如JSON示例中的ATOOO)比较:
try { var idToken = testobject.SelectToken("$.Id"); if (idToken != null && idToken.Value<string>() == "ATOOO") { Console.WriteLine("\n\nId字段存在且值正确"); } else { Console.WriteLine("\n\nId字段不存在或值不正确"); } } catch (Exception ex) { Console.WriteLine($"验证错误: {ex.Message}"); }
完整修正后的测试方法
public async Task TestJsonValidation() { var json = ReadMyJsonFile(@"FilePath/Test.json"); var testobject = JsonConvert.DeserializeObject<JObject>(json); if (testobject == null) { Console.WriteLine("JSON反序列化失败,内容为空或格式错误"); return; } Console.WriteLine("反序列化后的JSON对象:\n" + testobject.ToString()); // 验证Details字段 var detailsToken = testobject.SelectToken("$.Details"); if (detailsToken != null && detailsToken.Value<string>() == "XYZG") { Console.WriteLine("\nDetails字段存在且值为XYZG"); } else { Console.WriteLine("\nDetails字段不存在或值不为XYZG"); } // 验证Id字段 try { var idToken = testobject.SelectToken("$.Id"); if (idToken != null && idToken.Value<string>() == "ATOOO") { Console.WriteLine("\nId字段存在且值正确"); } else { Console.WriteLine("\nId字段不存在或值不正确"); } } catch (Exception ex) { Console.WriteLine($"\n验证Id字段时出错: {ex.Message}"); } }
内容的提问来源于stack exchange,提问作者Bilawal Wajid Ali
相关产品推荐
相关产品推荐

