Недавно я обнаружил проблему с оператором с нулевым коалесцированием при использовании Json.NET для анализа JSON в качестве динамических объектов. Предположим, что это мой динамический объект:
string json = "{ \"phones\": { \"personal\": null }, \"birthday\": null }";
dynamic d = JsonConvert.DeserializeObject(json);
Если я попытаюсь использовать??? оператор в одном из полей d, он возвращает null:
string s = "";
s += (d.phones.personal ?? "default");
Console.WriteLine(s + " " + s.Length); //outputs 0
Однако, если я присваиваю динамическое свойство строке, то она отлично работает:
string ss = d.phones.personal;
string s = "";
s += (ss ?? "default");
Console.WriteLine(s + " " + s.Length); //outputs default 7
Наконец, когда я вывожу Console.WriteLine(d.phones.personal == null)
, он выводит True
.
Я подробно рассмотрел эти проблемы на Pastebin.