C# 使用Newtonsoft JSON的自定义序列化问题

C# 使用Newtonsoft JSON的自定义序列化问题,c#,json,json.net,C#,Json,Json.net,为了提高性能,我尝试创建一个自定义序列化程序来与Newtonsoft JSON一起使用,但是由于某些原因,函数会随机停止,调用序列化程序的函数也会结束。没有例外,因此我无法确定原因。这就是功能: public string customSerialize(List<EntityJSON> data) { StringBuilder sb = new StringBuilder(); StringWriter sw = new Strin

为了提高性能,我尝试创建一个自定义序列化程序来与Newtonsoft JSON一起使用,但是由于某些原因,函数会随机停止,调用序列化程序的函数也会结束。没有例外,因此我无法确定原因。这就是功能:

    public string customSerialize(List<EntityJSON> data)
    {
        StringBuilder sb = new StringBuilder();
        StringWriter sw = new StringWriter(sb);
        JsonTextWriter writer = new JsonTextWriter(sw);
        writer.WriteStartObject();
        writer.WriteStartArray(); // <-- Line 89
        foreach (EntityJSON json in data)
        {
            writer.WritePropertyName("type");
            writer.WriteValue(json.type);

            writer.WritePropertyName("name");
            writer.WriteValue(json.name);

            writer.WritePropertyName("position");
            writer.WriteStartArray();
            writer.WritePropertyName("x");
            writer.WriteValue(json.position.x);
            writer.WritePropertyName("z");
            writer.WriteValue(json.position.z);
            writer.WritePropertyName("rot");
            writer.WriteValue(json.position.rot);
            writer.WriteEndArray();

            writer.WritePropertyName("flags");
            writer.WriteValue(json.flags);
        }
        writer.WriteEndArray();
        writer.WriteEndObject();

        return sb.ToString();
    }
公共字符串customSerialize(列表数据)
{
StringBuilder sb=新的StringBuilder();
StringWriter sw=新的StringWriter(sb);
JsonTextWriter=新的JsonTextWriter(sw);
writer.WriteStartObject();

writer.WriteStartArray();//您是否有可能在其他线程下调用此代码?可能是后台工作人员? 如果是这样,那么这可能就是为什么不抛出异常的原因。 只需将所有代码包装在Try-Catch块中,就可以捕获所有异常

更新:

我认为引发异常是因为您将数组放入一个JSON对象中而没有属性名,如果您这样做了,请插入此行

writer.WritePropertyName("arrayKey");
在第89行之前,前面的异常将消失,但您将在循环中得到一个新异常,这个新异常是由于键值对必须位于对象{}内,因此您不能将它们直接放入数组中

无论如何,我修复了您发布的代码,并从中得到以下结果:

[
    {
        "type": "type_0",
        "name": "type_0",
        "position": {
            "x": "position.x_0",
            "z": "position.a_0",
            "rot": "position.rot_0"
        },
        "flags": "flags_0"
    }, 
    {
        "type": "type_1",
        "name": "type_1",
        "position": {
            "x": "position.x_1",
            "z": "position.a_1",
            "rot": "position.rot_1"
        },
        "flags": "flags_1"
    }
]
代码:


writer.WriteStartArray();//有点像,这个函数是由另一个函数调用的,该函数每250毫秒由一个计时器(不是线程计时器)调用一次。我会试试你的想法。好的,得到了异常并更新了我的原始帖子,仍然不确定它是什么意思。
        writer.WriteStartArray(); // <-- Line 89
        for (int i = 0; i < 2; i++)
        {
            writer.WriteStartObject();
            writer.WritePropertyName("type");
            writer.WriteValue("type_" + i);

            writer.WritePropertyName("name");
            writer.WriteValue("type_" + i);

            writer.WritePropertyName("position");
            writer.WriteStartObject();

            writer.WritePropertyName("x");
            writer.WriteValue("position.x_" + i);
            writer.WritePropertyName("z");
            writer.WriteValue("position.a_" + i);
            writer.WritePropertyName("rot");
            writer.WriteValue("position.rot_" + i);
            writer.WriteEndObject();

            writer.WritePropertyName("flags");
            writer.WriteValue("flags_" + i);
            writer.WriteEndObject();
        }
        writer.WriteEndArray();