2016-08-24 132 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

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

相关问题