2016-08-24 2 views
1

Я собираю серийные записи (в JArray) для отправки в Event Hub. Когда я пишу данные в концентраторы событий, кажется, что вставляют дополнительные речевые метки вокруг JSON, то есть то, что написано "{"myjson":"blah"}", а не {"myjson":"blah"}, поэтому нисходящий поток у меня проблемы с чтением.Как правильно записывать JSON в Event Hub

Основываясь на этом guidance, я должен преобразовать JSON в строку, а затем использовать GetBytes, чтобы передать его в объект EventData. Я подозреваю, что моя попытка следовать этому руководству - вот моя проблема.

using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 
public static class EventDataTransform 
{ 
    public static EventData ToEventData(dynamic eventObject, out int payloadSize) 
    { 
     string json = eventObject.ToString(Formatting.None); 
     payloadSize = Encoding.UTF8.GetByteCount(json); 
     var payload = Encoding.UTF8.GetBytes(json); 
     var eventData = new EventData(payload) 
     { 
     }; 
     return eventData; 
    } 
} 

Как следует элемент из JArray, содержащего сериализованные данные будет преобразован в содержимое сообщения данныеСобытия?


Код местоположение вызова - используется в дозировании ДО 256Kb посылок

public bool MoveNext() 
{ 
     var batch = new List<EventData>(_allEvents.Count); 
     var batchSize = 0; 
     for (int i = _lastBatchedEventIndex; i < _allEvents.Count; i++) 
     { 
      dynamic evt = _allEvents[i]; 
      int payloadSize = 0; 
      var eventData = EventDataTransform.ToEventData(evt, out payloadSize); 
      var eventSize = payloadSize + EventDataOverheadBytes; 
      if (batchSize + eventSize > MaxBatchSizeBytes) 
      { 
       break; 
      } 

      batch.Add(eventData); 
      batchSize += eventSize; 
     } 
     _lastBatchedEventIndex += batch.Count(); 
     _currentBatch = batch; 
     return _currentBatch.Count() > 0; 
} 
+0

Как 'ToEventData()' называется? –

+0

Добавлен вопрос. Я также рассматриваю, является ли JArray правильной структурой для массива полных JSON docs FWIW или может ли какой-нибудь другой объект лучше обрабатывать записи. –

ответ

3

звучит как JArray уже содержит сериализованные объекты (строки). Вызов .ToString(Formatting.None) будет сериализовать его повторно во второй раз (обернуть его в кавычки).

Любопытно, если вы позвоните по телефону .ToString(), не пройдя мимо Formatting, это не приведет к его сериализации.

Эта скрипка демонстрирует это: https://dotnetfiddle.net/H4p6KL

+0

Если бы я мог упрекнуть больше времени. Благодаря! –