查找C#类和JSON文件之间的差异

时间:2018-11-15 14:41:18

标签: c# json compare configuration-files

我正在处理与C#类/对象相比在JSON文件中查找缺失属性的问题。

我得到了以下代码:

Public Class Server
{
    string URL { get; set; }
    string servername { get; set; }
    string project { get; set; }
    string type { get; set; }
    int number { get; set; }
}

我得到了几乎匹配的JSON文件

{
 "URL": "http://www.asdf.com",
 "servername": "myServer",
 "project": "Testproject"
}

与“服务器”类相比,如何识别JSON文件中缺少的属性?在这种情况下,缺少两个属性“类型”和“数字”。 当我将JSON文件反序列化为Class时,所有属性都将以的形式初始化为默认值。

...
Server myServer = new Server();
Server myServerJSON = JsonConvert.DeserializeObject<Server >({ "URL": "http://www.asdf.com", "servername": "myServer", "project": "Testproject"});
myServer.compareTo(myServerJSON);

我的最终目标是实现以下目标。我将配置存储在JSON文件中,并尝试找出更新类模型后JSON文件中缺少哪些属性,因此可以将这些丢失的值设置为默认值。

2 个答案:

答案 0 :(得分:1)

使用指定类型的类型反序列化它:

Server myServer = new Server();
var myServerJSON = JsonConvert.DeserializeObject({ "URL": "http://www.asdf.com", "servername": "myServer", "project": "Testproject"});

然后使用反射检查属性:

var jsontype = myServerJSON.GetType();
var maintype = myServer.GetType();  
string[] jp = jsontype.GetProperties().Select(x => x.Name).ToArray(); 
var result =  maintype.GetProperties().Where(x=> !jp.Contains(x.Name))

答案 1 :(得分:0)

好吧,您可以尝试手动检查每个变量,就像这样:

Server myServer = new Server();
Server myServerJSON = JsonConvert.DeserializeObject<Server >({ "URL": "http://www.asdf.com", "servername": "myServer", "project": "Testproject"});
myServer.compareTo(myServerJSON);
var val = myServer.GetType().GetProperty("URL").GetValue(myServer, null);
if (myServerJSON.URL === val) {
  // ...
}

但是我相信有更快的方法。继续寻找,我希望这能有所帮助!