JSON অ্যারে (উদাহরণস্বরূপ [1,2,3]) টাইপ '' তে ডিসিজায়ালাইজ করা যায় না কারণ টাইপটির সঠিকভাবে deserialize করতে JSON অবজেক্টের (যেমন {"নাম": "মান" requires) প্রয়োজন


103

আমি এই JSON আছে:

[
    {
        "Attributes": [
            {
                "Key": "Name",
                "Value": {
                    "Value": "Acc 1",
                    "Values": [
                        "Acc 1"
                    ]
                }
            },
            {
                "Key": "Id",
                "Value": {
                    "Value": "1",
                    "Values": [
                        "1"
                    ]
                }
            }
        ],
        "Name": "account",
        "Id": "1"
    },
    {
        "Attributes": [
            {
                "Key": "Name",
                "Value": {
                    "Value": "Acc 2",
                    "Values": [
                        "Acc 2"
                    ]
                }
            },
            {
                "Key": "Id",
                "Value": {
                    "Value": "2",
                    "Values": [
                        "2"
                    ]
                }
            }
        ],
        "Name": "account",
        "Id": "2"
    },
    {
        "Attributes": [
            {
                "Key": "Name",
                "Value": {
                    "Value": "Acc 3",
                    "Values": [
                        "Acc 3"
                    ]
                }
            },
            {
                "Key": "Id",
                "Value": {
                    "Value": "3",
                    "Values": [
                        "3"
                    ]
                }
            }
        ],
        "Name": "account",
        "Id": "2"
    }
]

এবং আমার এই ক্লাসগুলি রয়েছে:

public class RetrieveMultipleResponse
{
    public List<Attribute> Attributes { get; set; }
    public string Name { get; set; }
    public string Id { get; set; }
}

public class Value
{
    [JsonProperty("Value")]
    public string value { get; set; }
    public List<string> Values { get; set; }
}

public class Attribute
{
    public string Key { get; set; }
    public Value Value { get; set; }
}

আমি নীচের কোডটি ব্যবহার করে উপরের জেএসওনকে ডিসিজায়াল করার চেষ্টা করছি:

var objResponse1 = JsonConvert.DeserializeObject<RetrieveMultipleResponse>(JsonStr);

তবে আমি এই ত্রুটিটি পাচ্ছি:

বর্তমান JSON অ্যারে (উদাহরণস্বরূপ [1,2,3]) কে 'পরীক্ষায় টাইপ করুন না-করা যায় না et মোডেল etপ্রিটারিভ মাল্টিপল রিসার্ফোনস' কারণ সঠিকভাবে ডিসিরিয়ালাইজ করতে টাইপটির জন্য একটি JSON অবজেক্ট (যেমন {"নাম": "মান"।) প্রয়োজন। এই ত্রুটিটি সমাধানের জন্য হয় হয় JSON কে একটি JSON অবজেক্টে (যেমন {"নাম": "মান" to) এ পরিবর্তন করুন বা deserialized প্রকারকে একটি অ্যারে বা এমন একটি সংকলন পরিবর্তন করুন যা সংগ্রহের ইন্টারফেস (যেমন আইকোলিকেশন, আইলিস্ট) প্রয়োগ করে যা তালিকা করতে পারে একটি JSON অ্যারে থেকে deserialized করা। জেএসএনআরএআর্ট্রিবিউটকে কোনও জেএসওএন অ্যারে থেকে ডিসিরিয়ালাইজড করার জন্য বাধ্য করতে প্রকারের সাথে যুক্ত করা যেতে পারে। পথ '', লাইন 1, অবস্থান 1।

উত্তর:


170

আপনার জসন স্ট্রিংটি বর্গক্ষেত্র বন্ধনী ( []) এর মধ্যে আবৃত থাকে , সুতরাং এটি একক RetrieveMultipleResponseবস্তুর পরিবর্তে অ্যারে হিসাবে ব্যাখ্যা করা হয় । অতএব, সংগ্রহের টাইপ করতে আপনার এটি ডিসরিয়ালাইজ করা দরকার RetrieveMultipleResponse, উদাহরণস্বরূপ:

var objResponse1 = 
    JsonConvert.DeserializeObject<List<RetrieveMultipleResponse>>(JsonStr);

আমাকে "//" befor "[" "অপসারণ করতে হয়েছিল, তারপরে এটি আমার পক্ষে কাজ করেছিল। ধন্যবাদ
10:48

4
আপনি যদি সংগ্রহের পরিবর্তে এটি একটি একক অবজেক্ট হিসাবে রাখতে চান, আপনি কি কেবল জসনস্টার রিপ্লেস ("[", "") করতে পারবেন? প্রতিস্থাপন ("]", "") বা এটি কি ভাল অভ্যাস নয়?
সমৃদ্ধ

এফওয়াইআই এটি আমার পক্ষে কার্যকর হয়নি কারণ আমি একটি এপিআই থেকে আমার জেএসএন পাচ্ছিলাম এবং আমার পুরো দিনের জন্য ফ্র্যাঙ্কিং ইউআরএল ভুল ছিল। > <
w00ngy

4
মাল্টিপল রিসার্ফেন্স এখানে কী?
freakishly

ধন্যবাদ এটি আমার জন্য কাজ করেছে << রেসপোনস 1 = জসনকনভার্ট.ডিজরিয়ালাইজ অবজেক্ট <লিস্ট <প্রশ্ন> ডেটা>> (এসআরটি); // myWord = myQuestionData.Word; ডিবাগ.লগ ("মাই ওয়ার্ড" + اعتراض রেসপোনস 1 [0]। ওয়ার্ড);
স্ট্যাকবাডি

10

যদি কেউ জেনারিক্সকে সমর্থন করতে চায় (একটি এক্সটেনশন পদ্ধতিতে) এটি হ'ল প্যাটার্ন ...

public  static List<T> Deserialize<T>(this string SerializedJSONString)
{
    var stuff = JsonConvert.DeserializeObject<List<T>>(SerializedJSONString);
    return stuff;
}

এটি এভাবে ব্যবহার করা হয়:

var rc = new MyHttpClient(URL);
//This response is the JSON Array (see posts above)
var response = rc.SendRequest();
var data = response.Deserialize<MyClassType>();

মাইক্র্লাসটাইপটি দেখতে দেখতে (জেএসওএন অ্যারের নামের মান জোড়ের সাথে অবশ্যই মিলবে)

[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
 public class MyClassType
 {
    [JsonProperty(PropertyName = "Id")]
    public string Id { get; set; }

    [JsonProperty(PropertyName = "Name")]
    public string Name { get; set; }

    [JsonProperty(PropertyName = "Description")]
    public string Description { get; set; }

    [JsonProperty(PropertyName = "Manager")]
    public string Manager { get; set; }

    [JsonProperty(PropertyName = "LastUpdate")]
    public DateTime LastUpdate { get; set; }
 }

নিউটোনসফট.জসন ডাউনলোড করতে NUGET ব্যবহার করুন যেখানে প্রয়োজন সেখানে একটি রেফারেন্স যুক্ত করুন ...

using Newtonsoft.Json;

4

সমাধানটিতে কোনও মন্তব্য যুক্ত করতে পারি না তবে এটি আমার পক্ষে কার্যকর হয়নি। আমার জন্য যে সমাধানটি কাজ করেছিল তা হ'ল:

var des = (MyClass)Newtonsoft.Json.JsonConvert.DeserializeObject(response, typeof(MyClass)); 
return des.data.Count.ToString();

শক্তভাবে টাইপ করা .NET অবজেক্টে জেএসওন অ্যারে ডিজিজারাইজ করা


0
var objResponse1 = 
JsonConvert.DeserializeObject<List<RetrieveMultipleResponse>>(JsonStr);

কাজ করছে!



0

এটি ব্যবহার করুন, FrontDataএটি JSON স্ট্রিং:

var objResponse1 = JsonConvert.DeserializeObject<List<DataTransfer>>(FrontData);  

এবং নিষ্কাশন তালিকা:

var a = objResponse1[0];
var b = a.CustomerData;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.