をネストされたインターフェイスのリストを解決し、私はその後、私は、私は、コンバータはIListのをマッピングするために取得することができますどのように以下のクラスの&インタフェースJSON.NETは、具体的なクラスに
[DataContract]
public class Health : IHealth
{
[DataMember(Name = "status")]
public string Status { get; set; }
[DataMember(Name = "alerts")]
[JsonConverter(typeof(ConcreteTypeConverter<List<Alert>>))]
public IList<IAlert> Alerts { get; set; }
}
[DataContract]
public class Alert : IAlert
{
[DataMember(Name = "code")]
public string Code { get; set; }
}
public interface IAlert
{
string Code { get; set; }
}
public interface IHealth
{
string Status { get; set; }
IList<IAlert> Alerts { get; set; }
}
を持つカスタムコンバータ
public class ConcreteTypeConverter<T> : 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<T>(reader);
}
public override bool CanConvert(Type objectType)
{
return true;
}
}
を持っていますリストに?
現在のコードは、あなたの問題は、コンバータではありません
Unable to cast object of type 'System.Collections.Generic.List`1[xxx.Services.xxx.New.Alert]' to type 'System.Collections.Generic.IList`1[xxx.Services.xxx.Configuration.Model.New.IAlert]'.
をあなたが名前空間の異なる部分を「アウトX-ED」しました例外メッセージ内の 'Alert'クラスの彼らは実際に同じですか、あるいは異なっていますか? –
彼らは異なっています。最初は具象クラスであり、次はコンクリートクラスが継承するインターフェースです。両方とも2つの別々のプロジェクトに入っています。 –
それは私が疑ったものです。ガレヌスのトップのリンクはなぜ私が知りたかったのかを説明しています:) –