2016-08-24 129 views
1

我將批量序列化的記錄(在JArray中)發送到事件中心。當我將數據寫入事件中心時,它似乎在JSON周圍插入額外的語音標記,即寫入的內容"{"myjson":"blah"}"而不是{"myjson":"blah"},所以下游我無法閱讀它。如何正確地將JSON寫入到事件中心

基於此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項被轉換成EVENTDATA消息的內容?


代碼中調用的位置 - 在配料中使用高達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文檔FWIW的正確結構,或者是否某個其他對象可能更適合處理條目。 –

回答

3

聽起來就像是JArray已經包含序列化對象(串)。調用.ToString(Formatting.None)將再次序列化它(用引號括起來)。

有趣的是,如果你調用.ToString()沒有傳遞一個Formatting,就不會再對其進行序列化。

這撥弄說明了這一點:https://dotnetfiddle.net/H4p6KL

+0

如果只有我能更多次提升。謝謝! –

相關問題