如何使用不接受单引号字符串标记的.NET库来验证JSON?

时间:2016-06-03 11:30:07

标签: .net json validation

我想验证来自外部源的JSON。 JSON RFC明确指出,所有字符串都应该用双引号括起来,单引号无效。但是,内置的JavaScriptSerializer和Json.NET的JsonConvert.DeserializeObject都接受单引号字符串作为有效字符串。有没有办法告诉他们不接受单引号字符串,还是有另一个可用的库根据RFC标准进行验证?

示例:

{
    "this": "is",
    "valid": "json"
}

{
    'this': 'is',
    'invalid': 'json',
    'but': 'parsed',
    'correctly': 'by',
    'both': 'parsers',
    'I': 'mentioned'
}

1 个答案:

答案 0 :(得分:1)

请参阅this topic,我认为,有类似于您的问题......

抱歉,我不够专心。你可能正在寻找这样的东西:

private bool ValidateJson(string json)
        {
            using (var reader = new JsonTextReader(new StringReader(json)))
            {
                while (reader.Read())
                {
                    if (reader.QuoteChar == '\'')
                        return false;
                }
            }

            return true;
        }

然后,让我们测试这个例子:

[TestMethod]
    public void SingleQuoteJsonDeserialize()
    {
        var jsonSingle = "{'this': 'is', 'invalid': 'json', 'but': 'parsed', 'correctly': 'by', 'both': 'parsers', 'I': 'mentioned'}";
        var jsonDouble = "{\"this\": \"is\", \"valid\": \"json\"}";

        Assert.AreEqual(false, ValidateJson(jsonSingle));
        Assert.AreEqual(true, ValidateJson(jsonDouble));
    }