#c# #wcf
#c# #wcf
Вопрос:
Мне нужно отправить массив связанных, но не того же типа объектов с сервера, что и JSON, через службу WCF. При попытке вернуть массив object[] служба WCF завершается с ошибкой. Я также подумал на шаг дальше, как бы я даже проанализировал это на клиенте?
Я придумал решение, используя класс JsonWrapper. Вместо отправки object[] я отправляю JsonWrapper[] . Возвращаемый JSON выглядит примерно так:
[
{
"Json":"{"Id":"abc"}",
"Type":"DemoServer.Foo"
},
{
"Json":"{"Id":"def","Count":3}",
"Type":"DemoServer.Bar"
}
]
Как вы можете видеть, я дважды сериализую JSON, что означает, что я должен десериализовать возвращаемый массив, а затем десериализовать каждый элемент по отдельности. Мне в некоторой степени нравится этот подход, поскольку объекты не обязательно должны быть двоично совместимыми как на сервере, так и на клиенте. Каким-то образом двойная сериализация JSON кажется неправильной.
Есть ли лучший подход к этому? Я использую WCF на сервере и Json.net на клиенте. Я знаю о параметре «__type», но я не уверен, что это решение моей проблемы.
Комментарии:
1. Что касается вашего контракта с данными WCF, знаете ли вы о
KnownTypeAttribute
. Вот как вы сообщаете WCF потенциальные подклассы вашего возвращаемого значения. Вы экспериментировали с этим?