Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较JSON结构_C#_Json - Fatal编程技术网

C# 比较JSON结构

C# 比较JSON结构,c#,json,C#,Json,我正在测试一个返回JSON的API。返回的值具有子对象(例如具有from和to属性的日期对象)。我有一个示例JSON字符串和API返回的字符串。通过仅键和不通过值来比较两者的最佳方法是什么,以便只比较JSON的结构(在本例中使用C#,以防有任何暴露)?我见过类似的问题被问到,但不完全是我想要的 目前问题中的JSON如下所示: { "collection":[{ "timePeriod":{ "from": "2017-01-01", "to"

我正在测试一个返回JSON的API。返回的值具有子对象(例如具有from和to属性的日期对象)。我有一个示例JSON字符串和API返回的字符串。通过仅键和不通过值来比较两者的最佳方法是什么,以便只比较JSON的结构(在本例中使用C#,以防有任何暴露)?我见过类似的问题被问到,但不完全是我想要的

目前问题中的JSON如下所示:

{
   "collection":[{
      "timePeriod":{
         "from": "2017-01-01",
         "to": "2017-02-01"
      },
      "type": "a",
      "amount": 463872,
      "outstanding": 463872,
      "due": "2017-03-08"
   }]
}

一种解决方案是使用和nuget包

您可以创建JSON模式或基于C#对象生成JSON模式。在本例中,我生成了一些与您的JSON结构匹配的类(对于类名很抱歉):

您还可以获得架构错误,如下所示:

IList<string> messages;
bool isValidSchema = data.IsValid(schema, out messages);

foreach (string message in messages)
{
    Console.WriteLine(message);
}
IList消息;
bool-isValidSchema=data.IsValid(schema,out消息);
foreach(消息中的字符串消息)
{
控制台写入线(消息);
}

您是否尝试过使用
JToken.DeepEquals
@ArunKumar它将比较键和值,OP只是想比较键。您可以使用
JObject
上的反射,解析这两个json字符串后将得到反射。比如
jObject.Properties().ToList()Check DeepEquals显示为比较值和键。我不想在这种情况下看到它,它工作得很好。谢谢你的帮助。
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Schema;
using Newtonsoft.Json.Schema.Generation;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string json = @"{
   ""collection"":[{
      ""timePeriod"":{
         ""from"": ""2017-01-01"",
         ""to"": ""2017-02-01""
      },
      ""type"": ""a"",
      ""amount"": 463872,
      ""outstanding"": 463872,
      ""due"": ""2017-03-08""
   }]
}";

            var generator = new JSchemaGenerator();
            JSchema schema = generator.Generate(typeof(RootObject));

            JObject data = JObject.Parse(json);

            bool isValidSchema = data.IsValid(schema);
        }
    }
}
IList<string> messages;
bool isValidSchema = data.IsValid(schema, out messages);

foreach (string message in messages)
{
    Console.WriteLine(message);
}