Может ли protobuf-net десериализовать защищенные / дружественные поля в Silverlight? - PullRequest
2 голосов
/ 20 декабря 2011

У меня сложная иерархия объектов, с которой я боролся, чтобы полностью передать ее по проводам при использовании Silverlight с WCF.Я испробовал DataContractSerializer до смерти, и главная проблема в том, что я пытаюсь использовать словарь с несколькими циклическими ссылками и просто не могу заставить его работать.

Я переключился на просмотр protobufЧистая мысль, что в любом случае лучше использовать двоичный формат.Я надеялся, что смогу просто найти и заменить, чтобы добавить атрибуты ProtoMember в свойства.Однако многие свойства, которые сериализуются с атрибутами DataMember, объявлены как Friend (vb.net).Я обнаружил, что protobuf-net выдает ошибку при десериализации, говоря:

Attempt by method <blah> to access field <fieldname> failed.

Я обнаружил, что установка поля для защищенного вызывает ту же ошибку, и единственный способ обойти это - установить поледля публики - это то, что я не хочу делать.Возможно ли это сделать с помощью защищенного установщика или аналогичного свойства свойства, которое поддерживает поле?Хотя это будет проблемой (многие поля / свойства и классы), это по крайней мере решит проблему.Сериализация на серверной части работает нормально.

Если это невозможно, кто-нибудь может подсказать, как я могу получить сложную иерархию объектов с циклическими ссылками, которые включают несколько словарей по проводам в их полной форме?Я понимаю, что Silverlight добавляет несколько ограничений к этому процессу, но, надеюсь, кто-то уже преуспел в этом.

Обратите внимание, что это Silverlight 5

1 Ответ

0 голосов
/ 20 декабря 2011

в Silverlight: нет; среда выполнения имеет более высокий уровень паранойи, и вы просто не можете получить доступ к закрытым частям других типов. Даже Silverlight DataContractSerializer страница имеет оговорку:

Вы можете сериализовать поля и свойства, если они общедоступны.

Насколько я понимаю, этого нельзя избежать в Silverlight.

...