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



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

我得到了以下代码:

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文件中缺失的属性?在这种情况下,缺少两个属性"type"one_answers"number"。当我将JSON文件反序列化到类中时,所有属性都会以默认值初始化。

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

我的最终目标如下。我在JSON文件中存储了一个配置,并试图找出在更新类模型后JSON文件中缺少哪些属性,这样我就可以用默认值设置这些缺少的值。

在不指定强制转换类型的情况下对其进行反序列化:

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))

好吧,您可以尝试手动检查每个变量,如下所示:

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) {
// ...
}

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

相关内容

  • 没有找到相关文章

最新更新