我有一个模型,我在webApi中使用。我的模型如下。JsonConverter null整个模型
public class Model: IModel
{
public string Data1 { get; set; }
public string Data2 { get; set; }
public int DataInt { get; set; }
[JsonConverter(typeof(JsonConcreteTypeConverter<MyObject>))]
public List<IMyObject> DataObjects { get; set; }
}
}
为了反序列化该接口,我创建了我自己的jsonConverter类,如下所示。
public class JsonConcreteTypeConverter<TConcreteType>: JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return serializer.Deserialize<TConcreteType>(reader);
}
public override bool CanConvert(Type objectType)
{
bool result;
if (objectType == typeof(MyObject))
{
result = true;
}
else
{
result = false;
}
return result;
}
}
这是控制器
[HttpPost]
[Route("api/{ObjectId}/Action")]
public IHttpActionResult RunAsyncAction([FromBody] Model action)
{
IModel modelAction = action;
//Other code
return Content(HttpStatusCode.Accepted, OPERATION_ACCEPTED_MESSAGE);
}
说我遇到的问题是,当我使用这个jsonConverter串行无法反序列化模型,当我打电话的WebAPI我得到空内我从FromBody获得的“动作”对象。如果我删除了JsonConverter,我会正确地获得所有序列化,除非接口是null,因为序列化程序无法反序列化它。 Jsons在调用中格式正确。谢谢
如果您不使用所提供的类型,通用转换器的要点是什么? – kiziu
@ kiziu我纠正了代码,现在代码就像是在问题中粘贴代码一样。反序列化返回null – acostela
“CanConvert”中仍然存在错误,但现在无关紧要。序列化过程中有什么不寻常的事情吗?我用'JsonConvert.SerializeObject'序列化'Model',它工作正常(我刚创建了一些虚拟的'IMyObject'和'MyObject')。我现在可以说的是,你的'JsonConverter'不会按照你的计划工作 - 它不适用于集合中的项目,而是整个集合(属性标记为属性)。 – kiziu