首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确地将JSON写入事件中心

如何正确地将JSON写入事件中心
EN

Stack Overflow用户
提问于 2016-08-24 14:26:08
回答 1查看 4.9K关注 0票数 2

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

基于这个指导性,我必须将JSON转换为string,然后使用GetBytes将其传递给EventData对象。我怀疑,我试图遵循这一指导是我的问题产生的地方。

代码语言:javascript
运行
复制
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的包裹

代码语言:javascript
运行
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-24 16:31:02

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

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

这个小提琴演示了这一点:https://dotnetfiddle.net/H4p6KL

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39126042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档