2013-12-14 13 views
9

Kullanıcıların tarayıcıdaki nesnelerin koleksiyonlarını yönetmelerine ve Kaydet düğmesine tıklandığında tüm değişiklikleri bir defada gerçekleştirmelerine olanak tanıyan bir AngularJS + MVC 5 + Web API 2 uygulamasına sahibim. Değişiklikler yapıldıktan sonra, JavaScript nesnelerine bir veya daha fazla özellik eklenir: Istured, IsUpdated, IsRemoved. Model, modelin ne zaman devam edeceğini belirlemek için sunucu tarafı tarafından kontrol edilir.Json.NET'e belirli özellikleri seri hale getirip serileştirmemesi talimatı verebilir miyim?

modeli Web API üzerinden Json.NET kullanarak servis edilir ve temel sınıftır: Bu harika çalışıyor

public class CollectionItemViewModel : ICollectionItem 
{ 
    public bool IsAdded { get; set; } 
    public bool IsUpdated { get; set; } 
    public bool IsRemoved { get; set; } 
} 

ama benim tefrika JSON cruft ekler. Bu üç özelliği ShouldSerialize ile serileştirmemeyi seçebilirim, ancak bu aynı zamanda serileştirmeyi de engeller.

public bool ShouldSerializeIsAdded() 
{ 
    return false; 
} 

public bool ShouldSerializeIsUpdated() 
{ 
    return false; 
} 

public bool ShouldSerializeIsRemoved() 
{ 
    return false; 
} 

Json.NET kullanarak belirli özellikleri seri hale getirmek, serileştirmek mümkün değil midir?

+1

ShouldSerialize * kesinlikle seri birleştirmeyi etkilememelidir. Bundan kesinlikle emin misin? Çünkü bu büyük bir hata olacaktır –

cevap

12

Sadece * yöntemler ShouldSerialize kullanmak gerekir. Bunlar sadece serileşmeyi etkiliyor, serileştirme değil.

+0

Gerçeklik kontrolü için teşekkürler. Yemin ederim, bunu Softlion'un cevabı üzerine yaptığım yorumda açıklandığı gibi test ettim, ama görünüşe göre yeterince yakın değil. Deserialization beklendiği gibi çalışıyor; Sorun ilgisiz ve uygulamanıza özeldi. – Jared

-3

Doğru öznitelik JsonIgnore'dir. Mevcut burada

[JsonIgnore] 
public int Id {get;set;} 

Kaynak doc: Söz gösterildiği gibi

http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reducing-serialized-json-size

+1

JsonIgnore, aynı zamanda, seri hale getirmeyi de engeller. Isided = true olduğunda bir örnek POST yakalamak için Fiddler'ı kullanarak test ettim, daha sonra aynı ismimi hem JumperIgnore hem de benim Isgged özelliğimde oynattım. Marc'ın ileri sürdüğü gibi, JsonIgnore olmadan ve yanlış geri dönen ShouldSerializeIsAdded ile doğru şekilde seri hale getirildi. JsonIgnore eklendiğinde IsAdded = false. – Jared

+1

@Jared aslında, bu özelliği tamamen kullanılmayacak - bu da seri hale getirme sırasında kullanılmayacak. –

İlgili konular