Asp.net এমভিসিতে জসনআরসাল্টের মাধ্যমে ফিরে আসা একটি ExpandoObject কীভাবে সমতল করা যায়?


95

ExpandoObjectরানটাইমের সময় সার্ভার-সাইড ডায়নামিক অবজেক্টটি সংকলন করার সময় আমি সত্যিই পছন্দ করি তবে জেএসএন সিরিয়ালাইজেশনের সময় এই জিনিসটি সমতল করতে আমার সমস্যা হচ্ছে। প্রথমত, আমি অবজেক্টটি ইনস্ট্যান্ট করি:

dynamic expando = new ExpandoObject();
var d = expando as IDictionary<string, object>;
expando.Add("SomeProp", SomeValueOrClass);

এ পর্যন্ত সব ঠিকই. আমার এমভিসি কন্ট্রোলারে, আমি এটি পরে জসনআরসাল্ট হিসাবে পাঠাতে চাই, তাই আমি এটি করি:

return new JsonResult(expando);

এটি ব্রাউজারটি গ্রাস করার জন্য নীচের দিকে জেএসওএনকে সিরিয়ালাইজ করেছে:

[{"Key":"SomeProp", "Value": SomeValueOrClass}]

তবে আমি যা দেখতে চাই তা হ'ল:

{SomeProp: SomeValueOrClass}

আমি জানি যে আমি যদি এর dynamicপরিবর্তে ব্যবহার করি তবে আমি এটি অর্জন করতে পারি ExpandoObject- বৈশিষ্ট্য এবং মানগুলিকে একক বস্তুতে (কোনও কী বা মান ব্যবসা ছাড়াই) JsonResultসিরিয়ালায়িত করতে সক্ষম dynamic, তবে আমার যে কারণটি ব্যবহার করতে হবে ExpandoObjectতা কারণ আমি সব জানি না রানটাইম হওয়া অবধি অবজেক্টে আমি যে বৈশিষ্ট্যগুলি চাই এবং যা আমি জানি, আমি কোনওটি dynamicব্যবহার না করে গতিশীলভাবে কোনও সম্পত্তি যুক্ত করতে পারি না ExpandoObject

আমার জাভাস্ক্রিপ্টে আমাকে "কী", "মান" ব্যবসায় সন্ধান করতে হতে পারে, তবে ক্লায়েন্টকে প্রেরণের আগে আমি এটিকে বের করার আশা করছিলাম। আপনার সাহায্যের জন্য ধন্যবাদ!


9
কেন কেবল এক্সপ্যান্ডোঅবজেক্টের পরিবর্তে অভিধান <স্ট্রিং, অবজেক্ট> ব্যবহার করবেন না? এটি আপনি যে ফর্ম্যাটটি চান তা স্বয়ংক্রিয়ভাবে সিরিয়ালাইজ হয় এবং আপনি কেবল আপনার এক্সপেন্ডোঅবজেক্টটিকে কোনও অভিধানের মতোই ব্যবহার করছেন। যদি আপনি বৈধ এক্সপেন্ডোঅবজেক্টের সিরিয়ালাইজ করতে চান তবে "রিটার্ন নিউ জসনআরসাল্ট (ডি। টোডেয়ারিয়াল (x => x.Key, x => x.Value)) ব্যবহার করে;" পন্থা সম্ভবত সেরা আপস।
BrainSlugs83

উত্তর:


37

আপনি এমন একটি বিশেষ জেএসওএন কনভার্টার তৈরি করতে পারেন যা কেবল এক্সপ্যান্ডোঅবজেক্টের জন্য কাজ করে এবং তারপরে এটি জাভাস্ক্রিপ্টশিরাইজারের একটি ইভেন্টে নিবন্ধিত করুন। এইভাবে আপনি প্রসারিত অ্যারের ক্রমিকায়িত করতে পারবেন, প্রসারিত বস্তুর সংমিশ্রণ এবং ... যতক্ষণ না আপনি অন্য ধরণের অবজেক্টটি আবিষ্কার করেন যা সঠিকভাবে ক্রমবর্ধমান হয় না ("আপনি যেভাবে চান"), তারপরে আপনি অন্য রূপান্তরকারী তৈরি করুন বা অন্য ধরণের সাথে যুক্ত করুন এইটা. আশাকরি এটা সাহায্য করবে.

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) });
        }
    }
}

রূপান্তরকারী ব্যবহার

var serializer = new JavaScriptSerializer(); 
serializer.RegisterConverters(new JavaScriptConverter[] { new ExpandoJSONConverter()});
var json = serializer.Serialize(obj);

4
এটি আমার প্রয়োজনের জন্য দুর্দান্ত কাজ করেছে। যদি কেউ এই জাতীয় কিছু NotImplementedExceptionযুক্ত করার জন্য কিছু কোড প্লাগ করতে চান তবে serializer.Deserialize<ExpandoObject>(json);@theurnurnmonk একটি সমাধান দেয় যা আমার পক্ষে কাজ করেছে।
পৃষ্ঠপোষক

4
এমবিসি কাঠামোয় একটি কাস্টম সিরিয়ালাইজেশন রুটিন প্লাগ করে তোলার দুর্দান্ত উদাহরণ @ পাবলো E
পিবি।

এটির সবচেয়ে সহজ উপায়টি আমি খুঁজে পেলাম: নতুন জাভাস্ক্রিপ্টসরিয়ালাইজার () ob আপনি কি মনে করেন?
কাভাইন

আমার সিরিয়ালাইজার পুনরাবৃত্তভাবে ডাকা হয়। যদি আমি রিকার্সনলিট সেট করি তবে আমি পুনরাবৃত্তির সীমা অতিক্রম করে ত্রুটি পেয়েছি বা ওভারফ্লো ব্যতিক্রম ত্রুটি স্ট্যাক করি। আমার কি করা উচিৎ? :(
ধনশ্রী

72

JSON.NET ব্যবহার করে আপনি প্রসারিত বস্তুকে "সমতল" করতে সিরিয়ালাইজ অবজেক্টকে কল করতে পারেন:

dynamic expando = new ExpandoObject();
expando.name = "John Smith";
expando.age = 30;

var json = JsonConvert.SerializeObject(expando);

আউটপুট দেবে:

{"name":"John Smith","age":30}

একটি এএসপি.নেট এমভিসি কন্ট্রোলারের প্রসঙ্গে, সামগ্রী-পদ্ধতি ব্যবহার করে ফলাফলটি ফেরানো যেতে পারে:

public class JsonController : Controller
{
    public ActionResult Data()
    {
        dynamic expando = new ExpandoObject();
        expando.name = "John Smith";
        expando.age = 30;

        var json = JsonConvert.SerializeObject(expando);

        return Content(json, "application/json");
    }
}

4
নিউটনসফট.জসন মানে?
আয়শ

4
newtonsoft.json বক্সের বাইরে এক্সপেনডো বা অভিধান এবং অভ্যন্তরীণ অভিধানের ভিতরে পুনরাবৃত্তির সম্প্রসারণের জন্য আরও ভাল পরিচালনা করছে
জোন পোলোভোরা

26

আপনি যে আচরণটি বর্ণনা করছেন তা অর্জন করতে এখানে আমি কী করেছি:

dynamic expando = new ExpandoObject();
expando.Blah = 42;
expando.Foo = "test";
...

var d = expando as IDictionary<string, object>;
d.Add("SomeProp", SomeValueOrClass);

// After you've added the properties you would like.
d = d.ToDictionary(x => x.Key, x => x.Value);
return new JsonResult(d);

ব্যয়টি হ'ল আপনি ডেটাটি ক্রমিক করার আগে একটি অনুলিপি তৈরি করছেন।


ভাল লাগল রিটার্ন নতুন JsonResult (((ExpandoObject) someIncomingDynamicExpando) .ToDictionary (আইটেম => item.Key, আইটেম => item.Value)): আপনি মাছি উপর গতিশীল কাস্ট করতে পারেন
joeriks

"সম্প্রসারণ.আড্ড" আমার পক্ষে কাজ করে না। আমি বিশ্বাস করি এই ক্ষেত্রে এটি "d.Add" (যা আমার পক্ষে কাজ করেছিল)।
জাস্টিন

9
সুতরাং অপেক্ষা করুন ... আপনি একটি এক্সপান্ডোঅবজেক্ট তৈরি করছেন, এটি অভিধান হিসাবে এটি একটি অভিধানের মতো ব্যবহার করছেন, এবং তারপরে যখন এটি যথেষ্ট ভাল না হয়, অভিধানে রূপান্তর করেন ... ... তবে কেন কেবল একটি অভিধান ব্যবহার করবেন না? এই ক্ষেত্রে? ... o_o
BrainSlugs83

4
একটি ExpandoObjectআপনাকে একটি সাধারণ অভিধানের চেয়ে অনেক বেশি নমনীয়তা দেয়। যদিও উপরের উদাহরণটি এটি প্রদর্শন করে না, আপনি ExpandoObjectআপনার JSON এ থাকা বৈশিষ্ট্যগুলি যুক্ত করতে আপনি গতির গতিশীল বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন । একটি সাধারণ Dictioanryঅবজেক্টটি কোনও সমস্যা ছাড়াই JSON এ রূপান্তর করবে, সুতরাং রূপান্তরটি ExpandoObjectসম্পাদন করে, সহজে ব্যবহারযোগ্য গতিশীলকে JSONified করা যায় এমন বিন্যাসে রাখার একটি সহজ হে (এন) উপায় । আপনি যদিও সঠিক, উপরের উদাহরণটি হ'ল একটি রেডিকুলাস ব্যবহার ExpandoObject; একটি সরল Dictionaryঅনেক ভাল হবে।
আজাব

4
এই পদ্ধতির মতো আরও - একটি অনুলিপি তৈরি করা কোনও পরিবেশে কাজ করে না তবে আমার কাছে কেবল ছোট ছোট বস্তু রয়েছে এবং এক্সপ্যান্ডোটি একটি (অপরিবর্তনীয়) তৃতীয় পক্ষ দ্বারা সরবরাহ করা হয় ....
সেবাস্তিয়ান জে

12

আমি এটি একটি এক্সটেনশন পদ্ধতি লিখে সমাধান করেছি যা ExpandoObject কে JSON স্ট্রিংয়ে রূপান্তর করে:

public static string Flatten(this ExpandoObject expando)
{
    StringBuilder sb = new StringBuilder();
    List<string> contents = new List<string>();
    var d = expando as IDictionary<string, object>;
    sb.Append("{");

    foreach (KeyValuePair<string, object> kvp in d) {
        contents.Add(String.Format("{0}: {1}", kvp.Key,
           JsonConvert.SerializeObject(kvp.Value)));
    }
    sb.Append(String.Join(",", contents.ToArray()));

    sb.Append("}");

    return sb.ToString();
}

এটি দুর্দান্ত নিউটনসফট লাইব্রেরি ব্যবহার করে ।

জসনআরসাল্ট তারপরে এমন দেখাচ্ছে:

return JsonResult(expando.Flatten());

এবং এটি ব্রাউজারে ফিরে এসেছে:

"{SomeProp: SomeValueOrClass}"

এবং এটি এটি করে জাভাস্ক্রিপ্টে ব্যবহার করতে পারি ( এখানে রেফারেন্সড ):

var obj = JSON.parse(myJsonString);

আশা করি এটা কাজে লাগবে!


7
এটি প্রমাণ করবেন না! সুরক্ষা সমস্যাগুলি এড়াতে আপনার একটি জেএসএন ডিসরিওলাইজার ব্যবহার করা উচিত। Json2.js দেখুন: json.org/js.html var o = JSON.parse (myJsonString);
ল্যান্স ফিশার

যদিও আমি সেই এক্সটেনশন পদ্ধতিটি পছন্দ করি। সুন্দর!
ল্যান্স ফিশার 16

4
-1: স্ট্রিংকে ফিরিয়ে আনার একটি এক্সটেনশন পদ্ধতিতে এটি করা ফ্রেমওয়ার্কের সাথে এই আচরণটি ইন্টারফেস করার সঠিক উপায় নয়। পরিবর্তে আপনার বিল্ট ইন সিরিয়ালাইজেশন আর্কিটেকচারটি প্রসারিত করা উচিত।
BrainSlugs83

4
এই পদ্ধতির প্রধান অপূর্ণতা পুনরাবৃত্তির অভাব - আপনি যদি শীর্ষ স্তরের অবজেক্টটিকে গতিশীল হতে জানেন এবং এটি এটি কাজ করে তবে এই গতিশীল বস্তু যদি বস্তু গাছের প্রতিটি বা প্রতিটি স্তরে ফিরে আসতে পারে তবে এটি ব্যর্থ হয়।
ক্রিস মোসচিনি

এটিকে পুনরাবৃত্ত করার জন্য আমি এই পদ্ধতিতে কিছু উন্নতি করেছি। এই কোডটি এখানে: gist.github.com/renanvieira/e26dc34e2de156723f79
মাল্টমাস্টার

5

আমি জসনএফএক্স ব্যবহার করে একই সমস্যাটি সমাধান করতে সক্ষম হয়েছি

        dynamic person = new System.Dynamic.ExpandoObject();
        person.FirstName  = "John";
        person.LastName   = "Doe";
        person.Address    = "1234 Home St";
        person.City       = "Home Town";
        person.State      = "CA";
        person.Zip        = "12345";

        var writer = new JsonFx.Json.JsonWriter();
        return writer.Write(person);

আউটপুট:

First "ফার্স্টনাম": "জন", "শেষ নাম": "ডো", "ঠিকানা": "1234 হোম সেন্ট", "শহর": "হোম টাউন", "রাজ্য": "সিএ", "জিপ": "12345 "


4
আপনি নিম্নলিখিত পদক্ষেপগুলি সম্পন্ন করে জেএসএন। নেট (নিউটনসফট) ব্যবহার করে এটিও করতে পারেন। var সত্তা = ব্যক্তি হিসাবে বস্তু; var json = জসনকনভার্ট.সরিয়ালাইজবজেক্ট (সত্তা);
bkorzynski

4

আমি সমতলকরণের প্রক্রিয়াটি আরও একধাপ এগিয়ে নিয়েছি এবং তালিকার অবজেক্টগুলির জন্য চেক করেছি, যা মূল মানটি বাজে remove :)

public string Flatten(ExpandoObject expando)
    {
        StringBuilder sb = new StringBuilder();
        List<string> contents = new List<string>();
        var d = expando as IDictionary<string, object>;
        sb.Append("{ ");

        foreach (KeyValuePair<string, object> kvp in d)
        {       
            if (kvp.Value is ExpandoObject)
            {
                ExpandoObject expandoValue = (ExpandoObject)kvp.Value;
                StringBuilder expandoBuilder = new StringBuilder();
                expandoBuilder.Append(String.Format("\"{0}\":[", kvp.Key));

                String flat = Flatten(expandoValue);
                expandoBuilder.Append(flat);

                string expandoResult = expandoBuilder.ToString();
                // expandoResult = expandoResult.Remove(expandoResult.Length - 1);
                expandoResult += "]";
                contents.Add(expandoResult);
            }
            else if (kvp.Value is List<Object>)
            {
                List<Object> valueList = (List<Object>)kvp.Value;

                StringBuilder listBuilder = new StringBuilder();
                listBuilder.Append(String.Format("\"{0}\":[", kvp.Key));
                foreach (Object item in valueList)
                {
                    if (item is ExpandoObject)
                    {
                        String flat = Flatten(item as ExpandoObject);
                        listBuilder.Append(flat + ",");
                    }
                }

                string listResult = listBuilder.ToString();
                listResult = listResult.Remove(listResult.Length - 1);
                listResult += "]";
                contents.Add(listResult);

            }
            else
            { 
                contents.Add(String.Format("\"{0}\": {1}", kvp.Key,
                   JsonSerializer.Serialize(kvp.Value)));
            }
            //contents.Add("type: " + valueType);
        }
        sb.Append(String.Join(",", contents.ToArray()));

        sb.Append("}");

        return sb.ToString();
    }

3

এটি আপনার পক্ষে কার্যকর নাও হতে পারে তবে আমারও একইরকম প্রয়োজন ছিল তবে আমি সিরিয়ালাইজেবলডাইনামিকঅবজেক্টটি ব্যবহার করেছি

আমি অভিধানের নামটি "ফিল্ডস" এ পরিবর্তন করেছি এবং এরপরে এটি জেসন.নেটের সাথে সিরিয়ালাইজ করে জসন তৈরি করতে যা দেখে মনে হচ্ছে:

Fi "ক্ষেত্রগুলি": {"সম্পত্তি1": "মান 1", "সম্পত্তি 2": "মান 2" ইত্যাদি যেখানে সম্পত্তি1 এবং সম্পত্তি 2 গতিযুক্ত যুক্ত বৈশিষ্ট্য - যেমন অভিধান কীগুলি

এটি সঠিক হবে যদি আমি অতিরিক্ত "ক্ষেত্রগুলি" সম্পত্তি থেকে মুক্তি পেতে পারি যা বাকী অংশগুলিকে আবদ্ধ করে তোলে তবে আমি এই সীমাবদ্ধতার আশেপাশে কাজ করেছি।

অনুরোধে এই প্রশ্ন থেকে উত্তর সরানো হয়েছে


3

এটি দেরি করে দেওয়া উত্তর, তবে আমার একই সমস্যা ছিল এবং এই প্রশ্ন আমাকে সেগুলি সমাধান করতে সহায়তা করেছিল 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");

এখানে উপস্থিত সকল অংশগ্রহণকারীদের জন্য একটি বড় ধন্যবাদ আপনাকে ধন্যবাদ।


2

JsonResultJavaScriptSerializerযা Dictionary<string, object>আপনি চান ঠিক তেমন ডিস্ট্রিয়াল (কংক্রিট) ব্যবহার করে ।

Dictionary<string, object>কনস্ট্রাক্টরের একটি ওভারলোড রয়েছে যা লাগে IDictionary<string, object>

ExpandoObjectপ্রয়োগগুলি IDictionary<string, object> (আমি মনে করি আপনি এখানে দেখতে যাচ্ছেন আপনি দেখতে পারবেন ...)

একক স্তরের বিস্তৃতি b

dynamic expando = new ExpandoObject();

expando.hello = "hi";
expando.goodbye = "cya";

var dictionary = new Dictionary<string, object>(expando);

return this.Json(dictionary); // or new JsonResult { Data = dictionary };

কোডের এক লাইন, সমস্ত অন্তর্নির্মিত প্রকারগুলি ব্যবহার করে :)

নেস্টেড এক্সপেন্ডোঅবজেক্টস

অবশ্যই যদি আপনি বাসা বাঁধতে থাকেন ExpandoObjectতবে আপনার অবশ্যই পুনরাবৃত্তভাবে তাদের সকলকে Dictionary<string, object>এস-তে রূপান্তর করতে হবে :

public static Dictionary<string, object> RecursivelyDictionary(
    IDictionary<string, object> dictionary)
{
    var concrete = new Dictionary<string, object>();

    foreach (var element in dictionary)
    {
        var cast = element.Value as IDictionary<string, object>;
        var value = cast == null ? element.Value : RecursivelyDictionary(cast);
        concrete.Add(element.Key, value);
    }

    return concrete;
}

আপনার চূড়ান্ত কোড হয়ে উঠছে

dynamic expando = new ExpandoObject();
expando.hello = "hi";
expando.goodbye = "cya";
expando.world = new ExpandoObject();
expando.world.hello = "hello world";

var dictionary = RecursivelyDictionary(expando);

return this.Json(dictionary);

1

এএসপি.নেট 4-এ ওয়েবএপি থেকে ডায়নামিক এক্সপেন্ডোঅবজেক্ট ব্যবহার করে, ডিফল্ট JSON ফর্ম্যাটরটি সাধারণ JSON অবজেক্টে ExpandoObjects সমতল বলে মনে হয়।


-2

দেখে মনে হচ্ছে সিরিয়ালাইজারটি কোনও অভিধানে এক্সপ্যান্ডো কাস্ট করছে এবং তারপরে এটি সিরিয়ালিয়াস করছে (এভাবে কী / মান ব্যবসায়)। আপনি কি অভিধান হিসাবে ডিসেরিয়ালাইজিং এবং তারপরে আবার কোনও এক্সপেন্ডোতে কাস্ট করার চেষ্টা করেছেন?


4
Expando অবজেক্টটি আইডিটোরিটি <স্ট্রিং, অবজেক্ট> প্রয়োগ করে, তাই আমি মনে করি এজন্য JsonResult এটিকে কী / মান জোড়াগুলির অ্যারে হিসাবে সিরিয়াল করে izes এটিকে আইডি অভিধান হিসাবে এবং পিছনে ফেলা সত্যিই এটি সমতল করতে সহায়তা করবে না, আমি ভয় করি।
টিমডগ

-2

আমি ঠিক একই সমস্যা পেয়েছিলাম এবং বেশ অদ্ভুত কিছু আবিষ্কার করেছি। যদি আমি করি:

dynamic x = new ExpandoObject();
x.Prop1 = "xxx";
x.Prop2 = "yyy";
return Json
(
    new
    {
        x.Prop1,
        x.Prop2
    }
);

এটি কাজ করে, তবে কেবলমাত্র যদি আমার পদ্ধতিটি এইচটিপিপোস্ট বৈশিষ্ট্যটি ব্যবহার করে। আমি যদি HTTPGet ব্যবহার করি তবে আমি ত্রুটি পাই। সুতরাং আমার উত্তরটি কেবল এইচটিপিপস্টে কাজ করে। আমার ক্ষেত্রে এটি একটি অ্যাজাক্স কল ছিল যাতে আমি এইচটিপিপিস্ট দ্বারা এইচটিপিগেট পরিবর্তন করতে পারি।


4
-1 এটি সত্যিই কার্যকর নয় কারণ এটি স্ট্যাকওভারফ্লো.com/a/7042631/11635 এ ফোটায় এবং আপনি যদি ঘুরে ফিরে নামগুলির উপর নির্ভর করেন তবে গতিশীলভাবে এই জিনিসগুলি করার কোনও অর্থ নেই। AllowGet ইস্যুটি সম্পূর্ণ orthogonal।
রুবেন বারটেলিংক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.