2017-11-29 2 views
0

I 2 Typen haben, die eine Schnittstelle zu teilen ... und ich versuche zu serialize, nicht deserialisieren, eine Instanz von InternalClass zu JSON basierend auf dem Schema der ExternalClassJSON.net Serialize Wie andere Art

interface iShared { 
    public string ID {get; set;} 
    public string Name {get; set;} 
} 
public class InternalClass : iShared { 
    [JsonProperty("id")] 
    public string ID {get; set;} 
    [JsonProperty("name")] 
    public string Name {get;set;} 
    public int Age {get; set;} 
} 

public class ExertnalClass : iShared { 
    [JsonProperty("externalId")] 
    public string ID {get; set;} 
    [JsonProperty("name")] 
    public string Name {get;set;} 
    public string Description {get; set;} 
} 

ZB für eine Instanz von InternalClass:

new InternalClass {ID = "abc", Name = "myName", Age = 30 } 

statt:

{"id": "abc", "name": "myName", "age": 30} 

serialisiert als

{"externalId": "abc", name: "myName", description: null} 
+0

Ich glaube, Sie könnten versuchen, Serialisierung für zu viel zu verwenden. Statt dessen könnten Sie [tag: automapper] verwenden, um 'InternalClass' auf' ExertnalClass' abzubilden, und dann serialisieren. – dbc

Antwort

0

Diese should't von selbst, da diese Objekthierarchie möglich sein. Ich sehe zwei schnelle Möglichkeiten, dies zu tun:

a) Serialize als die Schnittstelle, deserialize als externe Klasse, reserialize als externe Klasse: Dies sollte die zusätzlichen Eigenschaften mit ihren Standardwerten hinzufügen.

b) Wenn Sie die Klassen bearbeiten können, verwenden Sie den sauberen Weg: Erstellen Sie einen (expliziten) Konvertierungsoperator oder eine ToExternalClass() Methode und kopieren Sie die Werte von Hand (oder Reflektion) dorthin. Ein Konstruktor ExternalClass(IShared cloneThis) könnte helfen, zusätzliche Arbeit zu vermeiden, wenn Sie diese Klassen in der Zukunft erweitern.

Verwandte Themen