我有一個模型,我在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