私は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;
}
}
そして、これは私がいる問題は、私はこのjsonConverterを使用する場合シリアライザは、モデルをデシリアライズすることができないと私はWEBAPIを呼び出すときに、私は内部のヌル得るということであるコントローラ
[HttpPost]
[Route("api/{ObjectId}/Action")]
public IHttpActionResult RunAsyncAction([FromBody] Model action)
{
IModel modelAction = action;
//Other code
return Content(HttpStatusCode.Accepted, OPERATION_ACCEPTED_MESSAGE);
}
ですFromBodyを取得する「アクション」オブジェクト。私がJsonConverterを削除した場合は、シリアライザがデシリアライズできないため、インターフェイスがnullの場合を除いて、すべて正しくシリアル化されます。 JSONは呼び出し時に正しくフォーマットされています。ありがとう
提供されているタイプを使用しない場合、汎用コンバータのポイントは何ですか? – kiziu
@kiziuコードを修正しました。コードを貼り付ける際にエラーが発生しました。コードは問題にあるとおりです。デシリアライズがnullを返しています – acostela
あなたはまだ 'CanConvert'にエラーがありますが、それは今は関係ありません。あなたはシリアル化プロセスで普通のことはありませんか?私は 'JsonConvert.SerializeObject'を使って' Model'をシリアル化しました。これはうまくいきました(私はちょっとした 'IMyObject'と' MyObject'を作成しました)。私が今言うこともできるのは、あなたの 'JsonConverter'が計画どおりに動作しないということです。コレクション内の項目には適用されませんが、コレクション全体(属性でマークされたプロパティへ)に適用されます。 – kiziu