【发布时间】:2018-11-18 11:25:07
【问题描述】:
我有基类和一些派生类:
abstract class A
{
public string type{get;}
}
class A1: A
{
type => Classes.A1
}
class A2: A
{
type => Classes.A2
}
我希望得到外部 API 的响应:
class ResponseResult
{
public List<A> values{get;set;}
}
但是当我阅读响应时,它会收到“无法创建抽象类”错误消息。 我已经写了简单的转换器
public class MyConverter: JsonConverter
{
private static readonly JsonSerializer Serializer = new JsonSerializer();
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var jObject = JObject.Load(reader);
var typeString = jObject.Value<Classes>("type");
var requiredType = RecoverType(typeString);
return Serializer.Deserialize(jObject.CreateReader(), requiredType);
}
private Type RecoverType(Classes type)
{
switch (type)
{
case Classes.A1:
return typeof(A1);
case Classes.A2:
return typeof(A2);
default:
throw new ArgumentOutOfRangeException(nameof(type), type, null);
}
}
public override bool CanConvert(Type objectType)
{
return typeof(A).IsAssignableFrom(objectType) || typeof(A) == objectType;
}
public override bool CanWrite => false;
}
我如何告诉 RestSharp 使用这个转换器?
【问题讨论】:
-
什么是类?
-
@miechoy 是枚举
-
你能提供枚举吗?
-
@miechoy 枚举类 { A1 = 1, A2 = 2 }
-
RestSharp 默认不使用 Json.NET。有关如何在 restsharp 中启用 Json.NET 的确认和说明,请参阅 Can I set a custom JsonSerializer to RestSharp RestClient 或 RestSharp serialization to JSON, object is not using SerializeAs attribute as expected。
标签: c# json json.net deserialization restsharp