2016-08-30 5 views
0

Ich benutze Json.net api JsonConvert.PopulateObject, die zwei Parameter akzeptiert zuerst die JSON-Zeichenfolge und zweitens das eigentliche Objekt, das Sie ausfüllen möchten.Benutzerdefinierte Deserialisierung von Eigenschaften mit Json.net

Die Struktur des Objekts, das ich ausfüllen möchte, ist

internal class Customer 
{ 

    public Customer() 
    { 
     this.CustomerAddress = new Address(); 
    } 
    public string Name { get; set; } 

    public Address CustomerAddress { get; set; } 
} 

public class Address 
{ 
    public string State { get; set; } 
    public string City { get; set; } 

    public string ZipCode { get; set; } 
} 

Meine json String

{ 
    "Name":"Jack", 
    "State":"ABC", 
    "City":"XX", 
    "ZipCode":"098" 
} 

Nun ist die Name Eigenschaft gefüllt wird ist becuase es in JSON-String vorhanden ist, aber die CustomerAddress ist wird nicht ausgefüllt. Gibt es eine Möglichkeit, mit der ich der Json.net-Bibliothek mitteilen kann, dass CustomerAddress.City aus der City-Eigenschaft in der JSON-Zeichenfolge bevölkern?

Antwort

1

Direkt - Nr.

Aber es sollte möglich sein, das z.B. hier ist ein Versuch, (vorausgesetzt, Sie können nicht json ändern):

class Customer 
{ 
    public string Name { get; set; } 
    public Address CustomerAddress { get; set; } = new Address(); // initial value 

    // private property used to get value from json 
    // attribute is needed to use not-matching names (e.g. if Customer already have City) 
    [JsonProperty(nameof(Address.City))] 
    string _city 
    { 
     set { CustomerAddress.City = value; } 
    } 

    // ... same for other properties of Address 
} 

Andere Möglichkeiten:

  • Änderung json Format Address Objekt enthalten;
  • benutzerdefinierte Serialisierung (z. B. mit Binder zu serialisieren gefälschte Typ und konvertieren Sie es zu benötigt);
  • ... (sollte mehr sein).
Verwandte Themen