Найти отличия между классом C # и JSON-файлом - PullRequest
0 голосов
/ 15 ноября 2018

Я имею дело с вопросом, чтобы найти отсутствующие свойства в файле 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-файле, отсутствующие по сравнению с классом "Сервер"?Как и в этом случае, есть два пропущенных атрибута «тип» и «номер».Когда я делаю десериализацию JSON-файла в класс, все свойства присутствуют, поскольку они инициализируются со значением по умолчанию.

...
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 голосов
/ 15 ноября 2018

Десериализовать его без указания типа приведения:

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))
0 голосов
/ 15 ноября 2018

Ну, вы можете попробовать проверить каждую переменную вручную, вот так:

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

Но я уверен, что есть более быстрый путь. Продолжайте искать, и я надеялся, что это немного помогло!

...