2016-08-24 10 views
1

イベントハブに送るシリアル化されたレコードを(JArrayで)バッチしています。イベントハブにデータを書き込んでいるときに、JSONの周りに余分なスピーチマークが挿入されているようです。つまり、"{"myjson":"blah"}"ではなく{"myjson":"blah"}と書かれていますので、それを読むのに問題があります。JSONをイベントハブに正しく書き込む方法

このguidanceに基づいて、JSONをstringに変換してGetBytesを使用してEventDataオブジェクトに渡す必要があります。私はこのガイダンスに従った私の試みが私の問題が発生している場所であると考えています。シリアライズされたデータを含むJArrayからアイテムが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既にシリアライズされたオブジェクト(文字列)が含まように256キロバイトパーセル

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

件までバッチ処理で用いられるサウンド。 .ToString(Formatting.None)を呼び出すと、もう一度もう一度シリアル化します(引用符で囲みます)。

驚くべきことに、をFormattingに入れずに呼び出すと、もう一度それをシリアル化しません。

このバイオリンは、このことを示しています。https://dotnetfiddle.net/H4p6KL

+0

私はもっと時間をupvoteできる場合。ありがとう! –

関連する問題