2011-07-06 15 views
6

JSON serileştirilmiş bir sözlük döndüren denetleyici GET eylemine sahip olmak isterim. Sözlükün anahtarı, özellikler olarak iki ilkel ile basit bir sınıftır - ClassOne olarak adlandırın. sözlüğünü JSON çalışırken Ancak, aşağıdaki hatayı alırsınız:Anahtar bir dize olmayan nesne olduğunda bir .NET sözlüğü JSON için mümkün mü?

System.Collections.Generic.Dictionary`2[[ClassOne],[ClassTwo]]' is not supported for serialization/deserialization of a dictionary, keys must be strings or objects. 

ifade "tuşlarına dizeleri veya nesneler olmalı" onun anahtarları gibi nesneler vardır bir sözlük getirilmeye mümkün IS anlamına gelir. Ancak, bunu yapmanın bir yolunu bulamıyorum. Bu durumda seçeneklerim nelerdir?

+1

Verilerinizi "JSON" için hangi API'yi kullanıyorsunuz? –

+0

Kullandığınız hangi JSON serileştirme kitaplığını belirtmeden, bu quesiton eksik. "DataContractJsonSerializer" kullanarak, çalıştığı JSON'u biraz tuhaf (söyleyemem) olsa da çalıştım ve bir istisna yaşamadım. Ayrıca, sorununuzu yeniden karşılayan minimal bir kod örneği de sağlayabilir misiniz? –

cevap

7

Eh, hayır. .net'den bir sözlük Javascript'teki bir hashta serileştirilir. Bir hash yalnızca anahtar olarak anahtarlara sahip olabilir, bu nedenle dize olmayan bir anahtarı serileştiremezsiniz. Sadece böyle bir seri hale getirilebilir bir birine sözlüğü dönüştürebilir:

myDictionary.ToDictionary(k => k.Key.Prop1 + "|" + k.Key.Prop2, v => v.Value); 

Belki temizleyici ClassOne bir ToString geçersiz kılma vermek ve hemen üstünde kodunda k.Key.ToString() aramak olacaktır.

+0

Nesneden bir dize anahtarı oluşturmaya gidiyoruz gibi görünüyor. Teşekkür ederim! – JustOnePixel

İlgili konular