更新:の回答があるため、古いタイトルが無関係で、「JsonConvertを使用するカスタムJsonConverterを実装する方法'それは現在のものです。私は朝まで多くの方法を試してみましたMVC.Netを使用してモデル内でjsonをインターフェイスコレクションにバインドする方法
私は非常にタイトと時間限界状況にいるよ、と私はタイトルが言うようしなければならない...、モデルは、メソッドを結合しませんMVCのFormCollectionに似ていますが、私のモデルの1つにインターフェースのリストを追加するので、nullsなどを返します。私はそれを処理する必要があるので...朝のクライアントレポートのバグとそのシステムは、だから私はそれを助けることはできませんが、修正するまで働きます。
ここに私の現在のコード:
どうしますか?ライターメソッドがサーバーに返すと、内部サーバーエラー500を返します。
自然にシリアライザオブジェクトを使用してこれを行いますが、シリアライザを使用してこのカスタマイズを行う方法がわかりません。このメソッドを呼び出す必要があります。シリアライザ設定を受け入れます。
public class CollectionInterfaceConverterForModels<TInterface> : JsonConverter
{
private readonly TypeNameSerializationBinder Binder;
public CollectionInterfaceConverterForModels()
{
Binder = new TypeNameSerializationBinder("Cartable.Models.{0}, Cartable");
}
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(IList<TInterface>));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
//IList<TInterface> items = serializer.Deserialize<List<TInterface>>(reader).Cast<TInterface>().ToList();
//return items;
var json = existingValue.ToString();
if (json == null)
json = "";
return JsonConvert.DeserializeObject<List<TInterface>>(json,
new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto,
Binder = Binder
});
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
//serializer.Serialize(writer, value, typeof(IList<T>));
string serializeObject = JsonConvert.SerializeObject(value, Formatting.Indented, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto,
Binder = Binder
});
writer.WriteRaw(serializeObject);
writer.Flush();
}
}
モデルのサンプル:まだ
public class IncomingFaxesVM
{
public long Code { get; set; }
.
.
.
[JsonConverter(typeof(CollectionInterfaceConverterForModels<IMetadata>))]
public List<IMetadata> Metadata { get; set; }
}