WCF JSON: отправка / синтаксический анализ массива смешанных типов объектов

#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 потенциальные подклассы вашего возвращаемого значения. Вы экспериментировали с этим?