C# 使用Newtonsoft JSON的自定义序列化问题
为了提高性能,我尝试创建一个自定义序列化程序来与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
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();