C# 有没有办法验证字符串是否为C中的JSON格式?

C# 有没有办法验证字符串是否为C中的JSON格式?,c#,json,json.net,C#,Json,Json.net,我尝试使用:- 此代码的问题在于,它将错误的JSON文件验证为正确,因为JToken.Parse会自动删除序列中加倍的元素,例如: { "Body" : { "Data" : {} }, "Head" : { "RequestArguments" : { "Scope" : "" }, "Status" : { "Code" : 255, "Reason" : "CGI-Arg

我尝试使用:-

此代码的问题在于,它将错误的JSON文件验证为正确,因为JToken.Parse会自动删除序列中加倍的元素,例如:

{
   "Body" : {
      "Data" : {}
   },
   "Head" : {
      "RequestArguments" : {
         "Scope" : ""
      },
      "Status" : {
         "Code" : 255,
         "Reason" : "CGI-Args: Invalid parameter '' for Scope.",
         "UserMessage" : ""
      },
      "Timestamp" : "2017-01-24T13:15:33+01:00"
   },
   "Head" : {
      "RequestArguments" : {
         "Scope" : ""
      },
      "Status" : {
         "Code" : 255,
         "Reason" : "CGI-Args: Invalid parameter '' for Scope.",
         "UserMessage" : ""
      },
      "Timestamp" : "2017-01-24T13:15:33+01:00"
   }
}

这里有两个相同级别的头标记是不允许的,但是JToken会自动解析掉其中一个头标记,因此生成的对象是有效的

您可以修改此代码以检查JToken.Parse result中的元素。如果值重复,您可以返回false

看看这个。可能重复的值可能不是最好的方法,但是您可以反序列化,然后再次序列化并比较两个字符串,如果它们不相同,这很好地表明JSON存在问题。如果您处理的是大型JSON文件,我不建议这样做。此外,这个正则表达式没有正确验证-因为它在与right相同的级别上验证2 Head标记,但它应该为false,因为在相同的级别上不可能有相同的标记@Tuc我想如果真的没有有效的验证,我会这么做的——但是是的,JToken并不是很好。解析结果永远不会重复,因为它使用某种字典——这正是我的问题。它不会引发错误,它只是删除重复的节点并创建一个新的非重复对象,而不是引发存在重复节点的错误
{
   "Body" : {
      "Data" : {}
   },
   "Head" : {
      "RequestArguments" : {
         "Scope" : ""
      },
      "Status" : {
         "Code" : 255,
         "Reason" : "CGI-Args: Invalid parameter '' for Scope.",
         "UserMessage" : ""
      },
      "Timestamp" : "2017-01-24T13:15:33+01:00"
   },
   "Head" : {
      "RequestArguments" : {
         "Scope" : ""
      },
      "Status" : {
         "Code" : 255,
         "Reason" : "CGI-Args: Invalid parameter '' for Scope.",
         "UserMessage" : ""
      },
      "Timestamp" : "2017-01-24T13:15:33+01:00"
   }
}