2016-04-08 13 views
3

Ich habe zwei "Schlüssel" für jede json-Eigenschaft. Ich serialisiere immer mit dem kurzen Eigenschaftsnamen, aber für die Deserialisierung muss ich sowohl den kurzen als auch den langen Eigenschaftsnamen unterstützen.
Also im Beispiel unten brauche ich Unterstützung "cid" und "customIdentifier" beim Deserialisieren zu SimpleClass. Kein Risiko für Konflikte, nur Unterstützung für die Handhabung von zwei Eigenschaftsnamen.Deserialisierung mit zwei möglichen Eigenschaftsnamen für eine Eigenschaft in json.net?

public class SimpleClass 
{ 
    [JsonProperty("cid")] 
    public int Id { get; set; } 
} 

[TestFixture] 
public class DeserializationDemo 
{ 
    [TestCase("{\"cid\": 1}")] 
    [TestCase("{\"customIdentifier\": 1}")] 
    public void JsonConvert_Can_Deserialize(string json) 
    { 
     var expected = new SimpleClass() { Id = 1 }; 
     var result = JsonConvert.DeserializeObject<SimpleClass>(json); 
     Assert.AreEqual(expected.Id, result.Id); 
    } 

    [TestCase("{\"cid\":1}")] 
    public void JsonConvert_Can_Serialize(string expected) 
    { 
     var test = new SimpleClass() { Id = 1 }; 
     var result = JsonConvert.SerializeObject(test); 
     Assert.AreEqual(expected, result); 
    } 
} 
+0

Kudos für die TestFixture - ich wünschte, mehr Fragen wie diese –

Antwort

5

Json.NET eine private und/oder Set-Unterkunft, die nur deserialisieren, wenn sie mit [JsonProperty] markiert. So können Sie tun:

public class SimpleClass 
{ 
    [JsonProperty("cid")] 
    public int Id { get; set; } 

    [JsonProperty("customIdentifier")] 
    int CustomIdentifier 
    { 
     set 
     { 
      Id = value; 
     } 
    } 
} 
+0

Einfache Lösung vorgestellt wurden, die funktioniert! – DNPE

Verwandte Themen