我想將OpenTK庫的向量轉換爲JSON或從JSON轉換爲向量。我的思維方式,它的工作只是把一個自定義JsonConverter,所以我這樣做:Json.NET自定義序列化/第三方類型的反序列化
class VectorConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Vector4);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var obj = JToken.Load(reader);
if (obj.Type == JTokenType.Array)
{
var arr = (JArray)obj;
if (arr.Count == 4 && arr.All(token => token.Type == JTokenType.Float))
{
return new Vector4(arr[0].Value<float>(), arr[1].Value<float>(), arr[2].Value<float>(), arr[3].Value<float>());
}
}
return null;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var vector = (Vector4)value;
writer.WriteStartArray();
writer.WriteValue(vector.X);
writer.WriteValue(vector.Y);
writer.WriteValue(vector.Z);
writer.WriteValue(vector.W);
writer.WriteEndArray();
}
}
現在,寫的部分是非常簡單的,我(我想?)。當序列化程序遍歷對象時,如果遇到CanConvert方法以true響應的對象,它會讓我的自定義序列化程序將其轉換爲JSON。那是有效的。
我真的不明白的是另一種方式。由於沒有辦法知道什麼類型的東西是用JSON文字寫成的,所以我認爲我必須自己分析對象,並確定它是否實際上是Vector對象。 我編寫的代碼有效,但如果檢查失敗,我不知道該怎麼辦。我如何告訴解串器,這不是我知道如何翻譯的對象之一,它應該做它的默認的東西呢?
我錯過了整個事情的工作方式嗎?
你有,這是非常有道理的。非常感謝你 –