Я постоянно становился все более расстроенным с помощью WCF и возвращаемых типов. В настоящее время я работаю над методом, который считывает данные из SQL, создает новые объекты определенного типа на основе количества полученных данных и затем присваивает значения объектов данным, полученным из SQL.WCF возвращает потоки или строки?
У меня есть функциональность для сериализации в JSON и XML. В идеале я хотел бы преобразовать свои сериализованные объекты в строки, чтобы я мог прочитать ответ из браузера в преобразованном виде, надеюсь, следующие примеры будут более объяснительными.
Преимущества, которые я получаю от того, когда я сериализации своих объектов, и возвращать поток, что форматирование является совершенным, и он использует свои DataMembers в классах, так что ответ будет в JSON будет выглядеть следующим образом:
{"GameID":1,"ProposalID":5}
Однако, когда я отправляюсь на получение данных в браузере, он просит меня сохранить файл потока, я открываю поток в блокноте, чтобы увидеть этот результат. Это не идеально, поскольку результат не появляется в браузере как строка.
Если я вернуть строку, я получаю данные, однако он не отформатирован с использованием DataMembers или любой из преимуществ от сериализации и информация, поэтому довольно пустой и не имеет смысла:
"3151"
As вы можете видеть из этого примера, я также извлекаю 2 SQL-поля по 2 переменные. И я не уверен, как добавить результаты в поток, поскольку в настоящий момент он возвращает только последний результат (5,1), не говоря уже о возврате их должным образом.
Хотя я не уверен, если я могу вставить URL чего-то, что я хотел бы достичь, вот это все равно: http://api.justin.tv/api/user/show/justin.json
Моя немедленная мысль была бы использовать XMLWriter или какой-то к вручную напишите информацию, однако я хотел бы иметь возможность выплачивать дивиденды для функций сериализации и DataMember.
Мой обратный поток Код:
foreach (MatchProposal proposal in Proposals)
{
returnStream = WriteJSON(SerializeToJSON(proposal));
}
public MemoryStream SerializeToJSON(object serializeObject)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(serializeObject.GetType());
MemoryStream memoryStream = new MemoryStream();
serializer.WriteObject(memoryStream, serializeObject);
return memoryStream;
}
public Stream WriteJSON(MemoryStream memoryStream)
{
string json = Encoding.Default.GetString(memoryStream.ToArray());
return new System.IO.MemoryStream(ASCIIEncoding.Default.GetBytes(json));
}
И мой невыполненным простой Строка возвращения код:
WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Json;
Он просто возвращает данных SQL.
Надеюсь, я дал достаточно информации в то, что я сделал до сих пор, и то, что я хотел бы получить из приведенного примера. В Short Я хотел бы получить то, что написано в API Justin.tv, я хотел бы воспользоваться сериализацией, однако, когда я просматриваю обратный поток в браузере, меня приветствует загрузка файла, которую я могу открыть в блокноте, который не идеален.
Спасибо за любые советы, если я по-видимому, заблудился в какой-то момент, или какие-либо резолюции, я могу реализовать :)
С уважением, Рональд
Вы применяете ContentType к ответу, например. 'text/xml', или' text/json'? –
@MatthewAbbott no нет объявленного типа контента, требуется ли для возвращения идеального потока? – Rodney
Я бы предположил, что это, вероятно, проблема. Поскольку вы возвращаете 'Stream' вместо объекта, я думаю, что не указан тип содержимого, поэтому браузер не знает, как его обрабатывать, - это вызывает сообщение загрузки. Попробуйте добавить тип контента 'text/json', чтобы узнать, вызывает ли это проблему. Затем я проверял, какой тип контента запрашивается, и чтобы ваша служба адаптировалась к этому. –