2017-12-07 1 views
0

Ich möchte ein IEnumerable als JsonObject, wie die Art und Weise serialisiert es durch die Anwendung des [JsonObject] Attribut serialisiert wird, aber ich kann nicht die DTO Klassen ändern, indem Einführung dieses Attributs.IEnumerable serialize als [JsonObject] in Json.NET, ohne das Attribut

Gibt es eine Möglichkeit, dem (De-) Serializer mitzuteilen, dass er JsonObject (de) Serialisierung erzwingen soll?

+0

Bitte geben Beispiel für Ihre Klasse und JSon Sie serialisieren möchten:

var settings = new JsonSerializerSettings { ContractResolver = new CustomResolver(), Formatting = Formatting.Indented }; string json = JsonConvert.SerializeObject(yourObject, settings); 

Hier eine Demo es zu – Evk

Antwort

2

Ja, Sie können eine benutzerdefinierte IContractResolver verwenden, um dies zu tun. Sie müssen lediglich eine Resolver-Klasse erstellen, die von Json.Net DefaultContractResolver abgeleitet ist, und die Methode CreateContract(Type) wie unten gezeigt überschreiben, wobei FooList durch den Typ Ihres Aufzählungszeichens ersetzt wird.

class CustomResolver : DefaultContractResolver 
{ 
    protected override JsonContract CreateContract(Type type) 
    { 
     if (type == typeof(FooList)) 
      return CreateObjectContract(typeof(FooList)); 

     return base.CreateContract(type); 
    } 
} 

den Resolver zu den Serializer Einstellungen hinzufügen und diese Einstellungen verwenden, wenn Sie serialisieren: https://dotnetfiddle.net/ocyjU4

+0

Sehr cool und genau das, was ich brauchte. Das Beispiel war genau richtig, ich wollte eigentlich eine Liste mit zusätzlichen Metadaten als Objekt serialisieren :-) – Edwin

Verwandte Themen