You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:35:46