2014-07-10 22 views
10

ile birden kurucular ile sınıfları serisini edilemiyor Ben bu bir eşdeğer Birden kurucular ile kontrol etmiyoruz türü vardır: Ben, özel bu serisini çalıştığınızda ŞimdiJson.NET

public class MyClass 
    { 
     private readonly string _property; 

     private MyClass() 
     { 
      Console.WriteLine("We don't want this one to be called."); 
     } 

     public MyClass(string property) 
     { 
      _property = property; 
     } 

     public MyClass(object obj) : this(obj.ToString()) {} 

     public string Property 
     { 
      get { return _property; } 
     } 

    } 

parametresiz kurucu çağrılır ve özellik asla ayarlanmaz. Test:

We don't want this one to be called. 

    Expected: "test" 
    But was: null 

nasıl düzeltebilirim, MyClass tanımını değiştirmeden:

[Test] 
    public void MyClassSerializes() 
    { 
     MyClass expected = new MyClass("test"); 
     string output = JsonConvert.SerializeObject(expected); 
     MyClass actual = JsonConvert.DeserializeObject<MyClass>(output); 
     Assert.AreEqual(expected.Property, actual.Property); 
    } 

şu çıktıyı verir? Ayrıca, bu tür gerçekten serileştirmek için gereken nesnelerin tanımında derin bir anahtardır.

cevap

5

Serileştirme sırasında kullanmak istediğiniz kurucuya [JsonConstructor] özniteliğini eklemeyi deneyin.

Değişim Sınıfınızda bu özelliği:

[JsonConstructor] 
public MyClass(string property) 
{ 
    _property = property; 
} 

ben sadece ve test sonra bu değişikliği yapamıyorsanız sana gerek herhalde

:-) geçer denedi CustomJsonConverter oluşturun. http://james.newtonking.com/json/help/index.html?topic=html/CustomJsonConverter.htm ve How to implement custom JsonConverter in JSON.NET to deserialize a List of base class objects? yardımcı olabilir. Bahse konu yazdığı gibi https://stackoverflow.com/a/8312048/234415

+0

sayesinde, ne yazık ki, ben sınıfını değiştiremezsiniz:

İşte CustomJsonConverter oluşturmak için yararlı bir bağlantıdır. – Grzenio

+0

O zaman bir CustomJsonConverter oluşturmanız gerektiğini düşünüyorum. Bu yaptığım bir şey korkmuyorum. –

+0

Buraya bakmayı deneyin: http://stackoverflow.com/a/8312048/234415 –