我正在try 用Utf 8 JsonReader i进行反序列化,因为它可以很容易地制作,但我需要进行自定义反序列化. 当我try 对其中包含对象的数组进行反序列化时,它会读取两次,如此屏幕截图所示:
我没有找到很多关于如何使用Utf 8 JsonReader的信息,所以也许我把这一切都搞砸了.
这是我的子化代码:
public Map? ReadYaml(string json)
{
JsonReaderOptions options = new() { AllowTrailingCommas = true, CommentHandling = JsonCommentHandling.Skip };
Utf8JsonReader reader = new(System.Text.Encoding.UTF8.GetBytes(json), options);
Map map = new();
while (reader.Read())
{
switch (reader.TokenType)
{
case JsonTokenType.PropertyName:
if (reader.ValueTextEquals("Map name"))
{
reader.Read();
map = new(reader.GetString());
}
if (reader.ValueTextEquals("Entities"))
{
reader.Read();
if (reader.TokenType == JsonTokenType.StartArray)
{
while (reader.Read())
{
if (reader.TokenType == JsonTokenType.EndArray)
break;
if (reader.TokenType == JsonTokenType.StartObject)
{
while (reader.Read())
{
if (reader.TokenType == JsonTokenType.EndObject)
break;
if (reader.TokenType == JsonTokenType.PropertyName)
{
reader.Read();
if (reader.TokenType == JsonTokenType.String)
{
var str = reader.GetString();
if (str != null)
{
Debug.Log(str);
}
}
}
}
}
else
{
break;
}
}
}
}
break;
}
}
return map;
}
这是我要反序列化的SON文件:
{
"Map name": "NewMap",
"Entities": [
{
"Name": "Entity",
"Active": "True",
"GUID": "f06ed7d3-f1b3-4cfd-a623-a7ceb17dbced"
},
{
"Name": "Entity #1",
"Active": "True",
"GUID": "03788f46-e430-4882-a097-e860d2c7aed5"
}
],
"Entity components": [
{
"Component type": "ExtremeEngine.Transform",
"Component data": [
{
"Position": null,
"Rotation": null,
"Scale": null,
"Entity": "f06ed7d3-f1b3-4cfd-a623-a7ceb17dbced",
"GUIHeaderIsOpened": "True",
"Enabled": "True",
"GUID": "95dea154-6f00-41b0-bdec-fe78cca589c3"
}
]
},
{
"Component type": "ExtremeEngine.Transform",
"Component data": [
{
"Position": null,
"Rotation": null,
"Scale": null,
"Entity": "03788f46-e430-4882-a097-e860d2c7aed5",
"GUIHeaderIsOpened": "True",
"Enabled": "True",
"GUID": "d92b131a-a82f-487f-b1c1-25ff13496284"
}
]
}
]
}