2012-08-09 5 views
5

Json.NET kullanarak bazı varlık sınıflarını JSON'a serileştirmem gerekiyor. ...Sınıflarımı açıklamadan Json.NET serileştirmesini özelleştirebilir miyim?

sorundur
[JsonProperty("lastName")] 
    public string LastName { get; set; } 

, benim tarafta da herhangi JSON ilgili özelliklerini almamayı tercih ediyorum orada mı: özelliklerinin isimleri özelleştirmek için, böyle [JsonProperty] özellik kullanmak Ek açıklamaları bir şekilde dışsallaştırmanın yolu, benim varlığımın üstesinden gelmemeleri için mi?

XmlSerializer'u kullanarak, XmlAttributeOverrides sınıfı ile kolayca yapılabilir. Json.NET için benzer bir şey var mı?

cevap

5

Evet, özel bir sözleşme çözümleyicisi oluşturabilir ve öznitelik kullanmadan JsonProperty tanımını özelleştirebilirsiniz. Örnek aşağıdaki gibidir:

// {"FirstName":"John"} 
+0

sayesinde iyi bir çözüm gibi görünüyor: Bu örnek programın

class Person { public string First { get; set; } } class PersonContractResolver : DefaultContractResolver { protected override JsonProperty CreateProperty( MemberInfo member, MemberSerialization memberSerialization) { var property = base.CreateProperty(member, memberSerialization); if (member.DeclaringType == typeof(Person) && member.Name == "First") { property.PropertyName = "FirstName"; } return property; } } class Program { static void Main(string[] args) { var result = JsonConvert.SerializeObject( new Person { First = "John" }, new JsonSerializerSettings { ContractResolver = new PersonContractResolver() }); Console.WriteLine(result); } } 

Bu çıkış aşağıdaki olacaktır. Herhalde daha jenerik yapmaya çalışacağım ... –

+0

Sonunda farklı bir rota aldım (varlıkları doğrudan JSON'a serileştirmek yerine belirli sınıflar oluşturdum), ama bir dahaki sefere çözümünüzü aklımda tutacağım. Teşekkürler! –