Десериализация данных JSON в C # с использованием JSON.NET

Если вы определяете свою перегруженную функцию в качестве функции-члена, тогда компилятор переводит выражения типа s1 + s2 в s1.operator+(s2). Это означает, что оператор-перегруженная функция-член вызывается в первом операнде. Вот как работают функции-члены!

Но что, если первый операнд не является классом? Есть большая проблема, если мы хотим перегрузить оператор, где первый операнд не является типом класса, а скорее скажем double. Поэтому вы не можете писать так 10.0 + s2. Тем не менее, вы можете записать операторную функцию с перегрузкой для выражений типа s1 + 10.0.

Чтобы решить эту задачу ordering , мы определяем перегруженную функцию оператора как friend, если ей нужно получить доступ private. Сделайте его friend ТОЛЬКО, когда ему нужно получить доступ к закрытым членам. В противном случае просто сделайте функцию non-friend non-member для улучшите инкапсуляцию !

class Sample
{
 public:
    Sample operator + (const Sample& op2); //works with s1 + s2
    Sample operator + (double op2); //works with s1 + 10.0

   //Make it `friend` only when it needs to access private members. 
   //Otherwise simply make it **non-friend non-member** function.
    friend Sample operator + (double op1, const Sample& op2); //works with 10.0 + s2
}

Прочтите эти данные: Небольшая проблема упорядочивания в операндах Как функции нечлена улучшают инкапсуляцию

140
задан Govind KamalaPrakash Malviya 1 October 2011 в 05:27
поделиться

1 ответ

Пробовали ли вы использовать универсальный метод DeserializeObject?

JsonConvert.DeserializeObject<MyAccount>(myjsondata);

Любые отсутствующие поля в данных JSON следует просто оставить NULL.

ОБНОВЛЕНИЕ:

Если строка JSON является массивом, попробуйте следующее:

var jarray = JsonConvert.DeserializeObject<List<MyAccount>>(myjsondata);

jarray должен быть List .

ДРУГОЕ ОБНОВЛЕНИЕ:

Полученное вами исключение несовместимо с массивом объектов - я думаю, что у сериализатора проблемы с вашим свойством accountstatusmodifiedby , типизированным по словарю.

Попробуйте исключить свойство accountstatusmodifiedby из сериализации и посмотрите, поможет ли это. Если это так, возможно, вам придется представить это свойство по-другому.

Документация: Сериализация и десериализация JSON с помощью Json.NET

77
ответ дан 23 November 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: