Если вы определяете свою перегруженную функцию в качестве функции-члена, тогда компилятор переводит выражения типа 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
}
Прочтите эти данные: Небольшая проблема упорядочивания в операндах Как функции нечлена улучшают инкапсуляцию
Пробовали ли вы использовать универсальный метод DeserializeObject?
JsonConvert.DeserializeObject<MyAccount>(myjsondata);
Любые отсутствующие поля в данных JSON следует просто оставить NULL.
ОБНОВЛЕНИЕ:
Если строка JSON является массивом, попробуйте следующее:
var jarray = JsonConvert.DeserializeObject<List<MyAccount>>(myjsondata);
jarray
должен быть List
.
ДРУГОЕ ОБНОВЛЕНИЕ:
Полученное вами исключение несовместимо с массивом объектов - я думаю, что у сериализатора проблемы с вашим свойством accountstatusmodifiedby
, типизированным по словарю.
Попробуйте исключить свойство accountstatusmodifiedby
из сериализации и посмотрите, поможет ли это. Если это так, возможно, вам придется представить это свойство по-другому.
Документация: Сериализация и десериализация JSON с помощью Json.NET