SORU
3 HAZİRAN 2009, ÇARŞAMBA


C# JSON otomatik özelliği kaldırması

Bazı JavaScript nesne uygun bir C JSON temsil serisini istiyorum# sınıf. Otomatik özellikler güzel özellikler dikkate alındığında, sadece alanları yapmaktansa bu sınıflar olarak tercih ederim. Ne yazık ki, bu .NET serileştirme Motoru (en azından varsayılan olarak) tamamen kaldırması otomatik özellikleri göz ardı eder ve yalnızca belli ki JavaScript nesne yok olan yedekleme alanı, önemsiyor.

Verilen ki no standard way to name backing fields ve dürüst olmak gerekirse istemiyorum bile rahatsız olan "hadi oluşturmak için bir JavaScript nesne benziyor ne vardı C# destek alanları" yaklaşımı gibi geliyor biraz kirli, tek yolu olabilir seri hale getirmek JavaScript alanlar için C# otomatik özellikleri yapabilsem kuvvet serileştirme motoru nedense görmezden desteğini alan ve Kullan özelliği doğrudan. Ne yazık ki, bu nasıl yapılır ya da eğer bu iş çözemedim. Herhangi bir fikir mutluluk duyacağız.

EDİT: İşte bir örnek:

Javascript:

function Cat()
{
    this.Name = "Whiskers";
    this.Breed = "Tabby";
}
var cat = new Cat();

Bu seri için "{Name: 'Bıyıklı'}".

C# sınıfı:

[Serializable()]
public class Cat
{
    public string Name { get; set; }
    public string Breed { get; set; }
}

Ve seri kaldırma kodu, başarısız:

new DataContractJsonSerializer(typeof(Cat)).ReadObject(inputStream);

Ve yedekleme alanı için arıyor çünkü başarısız olan istisnadan açıktır.

EDİT2Burada bu özel durum, eğer bu işe yarayacaksa (iç istisnalar):

Sistem.Çalışma zamanı.Seri hale getirme.SerializationException

"Veri sözleşme türü 'Test.Kedi' olamaz çünkü serisi gerekli veri üyeleri '<Name>k__BackingField, <Breed>k__BackingField' değil buldum."

CEVAP
3 HAZİRAN 2009, ÇARŞAMBA


Burada neler oluyor deserializer destek alanlarınız adını tahmin etmeye çalışıyor. Bu gibi açık eşlemeleri (DataMember nitelikleri DataContract/) ekleyerek bu sorunu çözebilirsiniz:

[DataContract]
public class Cat
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Breed { get; set; }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ipsy

    ipsy

    1 EKİM 2012
  • JayzTwoCents

    JayzTwoCents

    26 AĞUSTOS 2012
  • RiceBunny

    RiceBunny

    16 ŞUBAT 2006