2016-05-06 1 views
3

Я хочу запросить DocumentDb и вернуть raw json без какой-либо десериализации (у меня нет какой-либо бизнес-логики для запуска, поэтому десериализация будет ненужной служебной информацией). Это что-то мы можем сделать с текущим SDK?Может ли клиент C# DocumentDb возвратить raw json без десериализации?

Спасибо, Сома.

ответ

2

Хороший вопрос. В это время DocumentDB не предлагает сырой JSON через SDK. Вы всегда будете либо получать объект Document, либо если вы используете общий вызов, ваш собственный тип объекта.

В большинстве случаев имеет смысл десериализовать объект POCO, чтобы он мог быть проверен и использован в бизнес-коде перед возвратом клиенту. Но было бы неплохо иметь доступ к необработанному JSON, где нет необходимости в обработке, прежде чем возвращать его клиенту.

Надеюсь, это поможет.

+1

Благодарим за быстрый ответ. Json to Deserialized object обратно в json (для клиента), кажется, лишняя работа (особенно, когда нам не нужна десериализация). Вы нашли способ решить это или это то, что Microsoft должна придумать решение? Спасибо, Сома. –

+0

Нет, мы десериализуем объекты POCO. Мы встретились с командой DocDB еще в феврале и задали тот же вопрос, и в то время у них не было возможности. Думаю, я помню, что они могли бы работать над этой функцией для будущего выпуска. Платформа еще молода, и они постоянно выпускают новые функции. – cnaegle

1

В .NET SDK 1.9.5 вы можете получить доступ к ResourceResponse.ResponseStream:

[HttpGet] 
public async Task<HttpResponseMessage> GetDocumentById(string id) 
{ 
    var documentUri = UriFactory.CreateDocumentUri(database.Id, collection.Id, id); 
    var resourceResponse = await _client.ReadDocumentAsync(documentUri); 

    resourceResponse.ResponseStream.Position = 0; 
    using (StreamReader reader = new StreamReader(resourceResponse.ResponseStream, Encoding.UTF8)) 
    { 
     var response = Request.CreateResponse(HttpStatusCode.OK); 
     response.Content = new StringContent(reader.ReadToEnd(), Encoding.UTF8, "application/json"); 
     return response; 
    } 
} 

К сожалению, класс FeedResponse не предлагает схожую функциональность еще. Существует запрос UserVoice here, но официального ответа пока нет.

Редактировать: в моих тестах я вижу примерно 20..50 мс более быстрый результат для стандартного класса класса «Человек» с ResponseStream по сравнению с сериализацией десериализации.

Смежные вопросы