Итак, компания, в которой я работал, попросила меня создать библиотеку C# для компании-клиента, которой нужен доступ к нашему API с помощью .NET. Пока у меня есть рабочая библиотека, но у меня продолжают возникать проблемы с разбором необязательных свойств. Мы используем mongoDB на сервере, и mongoDB не хранит свойства, которые не предоставлены, даже если они определены в схеме.
Например, моя схема может выглядеть так:
{
name:String,
id:Number,
phone:String,
email:String,
experience:[]
}
Где, как я делаю документ:
{
name:"joe",
id:5,
phone:"222-222-2222",
}
Свойства email
и experience
НЕ существуют в моем документе, поэтому мой JSON выглядит точно так, как показано выше. Однако эти значения не являются обязательными, но мне все равно нужно проанализировать остальную часть. Проблема в том, что когда я анализирую приведенный выше код для всех возможных значений, когда я анализирую email
или experience
, синтаксический анализатор выдает исключение Null Reference Exception, и на то есть веская причина, потому что значение, которое я пытаюсь проанализировать, не существует и способ, которым я ссылка на эти значения выглядит так:
JObject o=JObject.Parse(json); //parse json to JObject json object
string name=(string)o["name"];
int id=(int)o["id"];
string phone=(string)o["phone"];
string email=(string)o["emain"];
List<string> exp=o["experience"].Select(t => (string)t).ToList();
Теперь мой код намного более объективен, я использую LINQ для создания объекта с именем Job
и объекта Jobs
для хранения JObject таким образом, чтобы вы могли запрашивать из него определенные значения, используя методы объекта Jobs
, который инициализируется исходным JSON. нить.
Дело в том, что единственный способ, который я могу придумать для обработки необязательных свойств в JSON, - это попробовать/перехватить каждое значение. Это кажется очень небрежным, и JSON, который мне нужно разобрать, составляет около 40-50 свойств. Кажется, что это будет очень медленно и огромный беспорядок кода. Мне интересно, смогу ли я реализовать это более чистым и эффективным способом.