Mise à jour: en raison de la réponse, j'ai trouvé l'ancien titre non pertinent et le changer à partir du 'Comment mettre en œuvre JsonConverter personnalisé qui utilise JsonConvert 'à ce que c'est actuellement.Comment lier un json à une collection Interface, et vice versa dans un modèle utilisant MVC.Net
Je suis dans une situation limite très serré et le temps, et je dois faire comme ce que dit le titre ...
j'ai essayé plusieurs façons jusqu'au matin, le modèle ne se lie pas, la méthode semblable à FormCollection dans MVC renvoie des nulls, et ainsi de suite et ainsi de suite, puisque j'ajoute une liste d'interfaces à un de mon modèle, donc je dois le manipuler, ... bugs de rapport de client du matin, et leur système est sous pression, donc je ne peux pas m'en empêcher mais travailler jusqu'à ce que ça répare.
voici mon code actuel:
Qu'arrive-t-? une fois la méthode de l'écrivain renvoie le serveur renvoie 500 erreur de serveur interne ...
naturellement ils le font en utilisant l'objet serializer, mais je ne sais pas comment faire cette personnalisation en utilisant le sérialiseur, donc j'ai vraiment besoin d'appeler cette méthode qui accepter un paramètre de sérialiseur.
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();
}
}
échantillon Modèle:
public class IncomingFaxesVM
{
public long Code { get; set; }
.
.
.
[JsonConverter(typeof(CollectionInterfaceConverterForModels<IMetadata>))]
public List<IMetadata> Metadata { get; set; }
}