gpt4 book ai didi

c# - 如何正确将 JSON 写入事件中心

转载 作者:行者123 更新时间:2023-11-30 20:34:31 25 4
gpt4 key购买 nike

我正在批量序列化记录(在 JArray 中)发送到事件中心。当我将数据写入事件中心时,它似乎在 JSON 周围插入了额外的语音标记,即编写的内容 "{"myjson":"blah"}" 而不是 {"myjson ":"blah"} 所以下游我很难阅读它。

基于此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;
}

最佳答案

听起来 JArray 已经包含序列化对象(字符串)。调用 .ToString(Formatting.None) 将再次序列化它(将其用引号引起来)。

有趣的是,如果您调用 .ToString() 而不传入 Formatting,它不会再次序列化它。

这个 fiddle 演示了这一点:https://dotnetfiddle.net/H4p6KL

关于c# - 如何正确将 JSON 写入事件中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39126042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com