Ich versuche, einige schwach typisierte Daten vom ASP.NET MVC-Host zum JavaScript-Client zu senden. Schwache Typisierung bedeutet hier entweder die Eigenschaft oder als Ergebnis eine ExpandoObject
.Wie Sie TypeNameHandling für alle Sammlungen bei der Serialisierung deaktivieren?
Aufgrund der TypeNameHandling = TypeNameHandling.Auto
Einstellung (die ich für schwach typisierte Objekte muß), erhalte ich die $type
Anmerkungen für Sammlungen als auch eine andere JSON Struktur ergibt: Statt eine einfache Anordnung zu haben, ich habe es eingewickelt in einer { $type: ..., $values: ... }
Struktur .
Wie könnte ich dies global für jede Art von Sammlungen weglassen?
Ich habe versucht, eine benutzerdefinierte Contract Resolver zu implementieren, scheint aber nicht mit ExpandoObject
s arbeiten.
public class JsonWebAPIContractResolver : DefaultContractResolver
{
public bool SkipTypNameHandlingOnCollections { get; set; }
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, memberSerialization);
if (SkipTypNameHandlingOnCollections && property.PropertyType.IsCollectionType())
property.TypeNameHandling = TypeNameHandling.None;
return property;
}
}
Im Code, den ich habe meine gute alte Erweiterungsmethode Type.IsCollectionType
, die einwandfrei funktioniert. Vielleicht besteht das Problem darin, dass dynamische Objekte den Vertragauflösungsmechanismus nicht durchlaufen?