Nasıl bir ExpandoObject ASP.NET mvc JsonResult ile döndü düzleştirmek için?
Gerçekten çalışma zamanında sunucu tarafında dinamik bir nesne derleme sırasında ExpandoObject
gibi, ama sorun bu şey JSON seri hale getirme sırasında düzleştirme dışında yaşıyorum. Önce, nesneyi oluşturmak:
dynamic expando = new ExpandoObject();
var d = expando as IDictionary<string, object>;
expando.Add("SomeProp", SomeValueOrClass);
Şimdiye kadar çok iyi. MVC benim denetleyicisi içinde, o zaman bu bir JsonResult olarak göndermek istiyorum, bu yüzden:
return new JsonResult(expando);
Bu içine JSON aşağıda, tarayıcı tarafından tüketilecek sıralar:
[{"Key":"SomeProp", "Value": SomeValueOrClass}]
AMA, asıl istediğim şey bu görmek için
{SomeProp: SomeValueOrClass}
Biliyorum ben elde yapıyorum dynamic
yerine ExpandoObject
-- JsonResult
mümkün hale dynamic
özellikleri ve değerleri içine tek bir nesne (Anahtar ya da Değer işletme). ben^>ama ExpandoObject
kullanmam gerekiyor bu nedenle çalışma zamanı kadar nesne istiyorum, çünkü bilmiyorumve bildiğim kadarıyla, dinamik ExpandoObject
kullanmadan dynamic
için bir özellik eklemek edemem.
Aracılığıyla elemek zorunda kalabilirim"", "Value" benim javascript iş, ama bu istemciye göndermeden önce anlamaya umuyordum. Anahtar Yardımlarınız için teşekkürler!
CEVAP
Ayrıca, sadece ExpandoObject için çalışan özel bir JSONConverter yapabilirsin ve sonra Javascriptserializeryapıcı örneği kaydetmek. Bu şekilde olabilir hale diziler expando kombinasyon expando nesneleri ve ... bulana kadar başka bir nesne değil almak doğru sıralanmış("u"), sonra başka bir Dönüştürücü, ya da ekleyin başka bir türü bu. Bu yardımcı olur umarım.
using System.Web.Script.Serialization;
public class ExpandoJSONConverter : JavaScriptConverter
{
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
var result = new Dictionary<string, object>();
var dictionary = obj as IDictionary<string, object>;
foreach (var item in dictionary)
result.Add(item.Key, item.Value);
return result;
}
public override IEnumerable<Type> SupportedTypes
{
get {
return new ReadOnlyCollection<Type>(new Type[] { typeof(System.Dynamic.ExpandoObject) });
}
}
}
//Using converter
var serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new JavaScriptConverter[] { new ExpandoJSONConverter()});
var json = serializer.Serialize(obj);
Nasıl bir özellik bir ExpandoObject üz...
Nasıl çok Boyutlu bir Dizi Düzleştirme...
Nasıl bir WordPress kullanmak dizi düz...
Nasıl bir JavaScript nesnesinin bir öz...
Nasıl Git deposu için boş bir dizin ek...