实现自定义 Newtonsoft JsonConverter (reader)
Implementation custom Newtonsoft JsonConverter (reader)
我有一个使用自定义 Newtonsoft Json 转换器写入 Json 的对象。该对象有两个变量(vec3 点数组和三角形索引数组)。这些值需要作为 base64 字符串存储在 json.
中
作者按预期工作,但我不知道如何读回数据并重新创建对象。
对象class定义:
public class Outline
{
[JsonConverter(typeof(ObjectToBase64Converter))]
public vec3[] Points { get; set; }
[JsonConverter(typeof(ObjectToBase64Converter))]
public int[] TriangleIndices { get; set; }
}
自定义Json转换器:
internal class ObjectToBase64Converter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
// ?? I've got no clue ??
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
using (MemoryStream memoryStream = new MemoryStream())
{
new BinaryFormatter().Serialize(memoryStream, value);
string base64String = Convert.ToBase64String(memoryStream.ToArray());
writer.WriteValue(base64String);
}
}
}
任何帮助将不胜感激,我已经坚持了几个小时。
你可以定义如下
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
// Convert the Base64 Value to Bytes
var dataBytes = Convert.FromBase64String(token.Value<String>());
// Deserialize the Binary Formatted Data
using (MemoryStream ms = new MemoryStream(dataBytes))
{
IFormatter br = new BinaryFormatter();
return Convert.ChangeType(br.Deserialize(ms),objectType);
}
}
我有一个使用自定义 Newtonsoft Json 转换器写入 Json 的对象。该对象有两个变量(vec3 点数组和三角形索引数组)。这些值需要作为 base64 字符串存储在 json.
中作者按预期工作,但我不知道如何读回数据并重新创建对象。
对象class定义:
public class Outline
{
[JsonConverter(typeof(ObjectToBase64Converter))]
public vec3[] Points { get; set; }
[JsonConverter(typeof(ObjectToBase64Converter))]
public int[] TriangleIndices { get; set; }
}
自定义Json转换器:
internal class ObjectToBase64Converter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
// ?? I've got no clue ??
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
using (MemoryStream memoryStream = new MemoryStream())
{
new BinaryFormatter().Serialize(memoryStream, value);
string base64String = Convert.ToBase64String(memoryStream.ToArray());
writer.WriteValue(base64String);
}
}
}
任何帮助将不胜感激,我已经坚持了几个小时。
你可以定义如下
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
// Convert the Base64 Value to Bytes
var dataBytes = Convert.FromBase64String(token.Value<String>());
// Deserialize the Binary Formatted Data
using (MemoryStream ms = new MemoryStream(dataBytes))
{
IFormatter br = new BinaryFormatter();
return Convert.ChangeType(br.Deserialize(ms),objectType);
}
}