এটি দেরি করে দেওয়া উত্তর, তবে আমার একই সমস্যা ছিল এবং এই প্রশ্ন আমাকে সেগুলি সমাধান করতে সহায়তা করেছিল helped সংক্ষিপ্তসার হিসাবে, আমি ভেবেছিলাম আমার ফলাফলগুলি পোস্ট করা উচিত, আশা করি এটি অন্যদের জন্য বাস্তবায়নের গতি বাড়ায়।
প্রথমে ExpandoJsonResult, যা আপনি নিজের ক্রিয়াকলাপের উদাহরণ ফিরিয়ে দিতে পারেন। অথবা আপনি আপনার নিয়ামকের মধ্যে জসন পদ্ধতিটিকে ওভাররাইড করতে পারেন এবং এটি সেখানে ফিরিয়ে দিতে পারেন।
public class ExpandoJsonResult : JsonResult
{
public override void ExecuteResult(ControllerContext context)
{
HttpResponseBase response = context.HttpContext.Response;
response.ContentType = !string.IsNullOrEmpty(ContentType) ? ContentType : "application/json";
response.ContentEncoding = ContentEncoding ?? response.ContentEncoding;
if (Data != null)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new JavaScriptConverter[] { new ExpandoConverter() });
response.Write(serializer.Serialize(Data));
}
}
}
তারপরে রূপান্তরকারী (যা সিরিয়ালাইজেশন এবং ডি-সিরিয়ালাইজেশন উভয় সমর্থন করে de ডি-সিরিয়ালাইজ কীভাবে করতে হয় তার উদাহরণের জন্য নীচে দেখুন)।
public class ExpandoConverter : JavaScriptConverter
{
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{ return DictionaryToExpando(dictionary); }
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{ return ((ExpandoObject)obj).ToDictionary(x => x.Key, x => x.Value); }
public override IEnumerable<Type> SupportedTypes
{ get { return new ReadOnlyCollection<Type>(new Type[] { typeof(System.Dynamic.ExpandoObject) }); } }
private ExpandoObject DictionaryToExpando(IDictionary<string, object> source)
{
var expandoObject = new ExpandoObject();
var expandoDictionary = (IDictionary<string, object>)expandoObject;
foreach (var kvp in source)
{
if (kvp.Value is IDictionary<string, object>) expandoDictionary.Add(kvp.Key, DictionaryToExpando((IDictionary<string, object>)kvp.Value));
else if (kvp.Value is ICollection)
{
var valueList = new List<object>();
foreach (var value in (ICollection)kvp.Value)
{
if (value is IDictionary<string, object>) valueList.Add(DictionaryToExpando((IDictionary<string, object>)value));
else valueList.Add(value);
}
expandoDictionary.Add(kvp.Key, valueList);
}
else expandoDictionary.Add(kvp.Key, kvp.Value);
}
return expandoObject;
}
}
কীভাবে এটি সিরিয়ালাইজেশনের জন্য ব্যবহার করবেন তা আপনি ExpandoJsonResult শ্রেণিতে দেখতে পারেন। ডি-সিরিয়ালাইজ করতে, সিরিয়ালাইজারটি তৈরি করুন এবং একইভাবে রূপান্তরকারীটি নিবন্ধ করুন, তবে ব্যবহার করুন
dynamic _data = serializer.Deserialize<ExpandoObject>("Your JSON string");
এখানে উপস্থিত সকল অংশগ্রহণকারীদের জন্য একটি বড় ধন্যবাদ আপনাকে ধন্যবাদ।