我正在批处理序列化记录(在JArray中)以发送到事件中心。当我将数据写入事件集线器时,它似乎是在JSON周围插入额外的语音标记,即所写的是"{"myjson":"blah"}"
,而不是{"myjson":"blah"}
,所以下游我很难阅读它。
基于这个指导性,我必须将JSON转换为string,然后使用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消息的内容?
代码调用位置-用于批处理256 in的包裹
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;
}
发布于 2016-08-24 08:31:02
听起来,JArray已经包含序列化的对象(字符串)。调用.ToString(Formatting.None)
将再次序列化它(用引号包装它)。
有趣的是,如果您调用.ToString()
而不传入Formatting
,它将不会再次序列化它。
这个小提琴演示了这一点:https://dotnetfiddle.net/H4p6KL
https://stackoverflow.com/questions/39126042
复制相似问题