【发布时间】:2015-07-25 05:54:23
【问题描述】:
我已经编写了一个自定义的 JsonConverter,我希望它可以让我在我的类中序列化和反序列化 Encoding 对象:
public class EncodingConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType.IsSubclassOf(typeof(Encoding));
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(((Encoding)value).EncodingName);
}
public override bool CanRead { get { return true; } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var name = reader.ReadAsString();
return Encoding.GetEncoding(name);
}
}
但是,当我运行以下测试代码时,调用DeserializeObject 时出现异常,并且永远不会调用ReadJson 方法。
class Program
{
private static void Main(string[] args)
{
var test = new TestClass();
var jsonSettings = new JsonSerializerSettings
{
Converters = new[] { new EncodingConverter(), }
};
var json = JsonConvert.SerializeObject(test, jsonSettings);
var test2 = JsonConvert.DeserializeObject<TestClass>(json, jsonSettings);
}
}
class TestClass
{
public string Property1;
public Encoding Encoding = Encoding.UTF8;
}
异常信息是:
目标类型 System.Text.Encoding 不是值类型或非抽象类。
我错过了什么吗?
【问题讨论】:
-
objectType.IsAssignableFrom(typeof(Encoding))计算结果为假。 -
您的
TestClass不能从Encoding分配。因此(Encoding)value无效。 -
@Amit Kumar Ghosh,此转换器仅用于编码对象。