मेरे पास एक नेट कोर एमवीसी वेब एप्लिकेशन है जहां मैं अपने यूआई में परिणाम दिखाने के लिए एक एपीआई बुला रहा हूं। मैं एजेक्स कॉल का उपयोग कर एपीआई को कॉल कर रहा हूं लेकिन एपीआई को कॉल करने के बाद मुझे निम्न त्रुटि संदेश मिलता है:

अनुरोध संसाधित करते समय एक हैंडल न किया गया अपवाद उत्पन्न हुआ। JsonSerializationException: वर्तमान JSON सरणी (जैसे [1,2,3]) को 'ProjectName.Models.ControllerName' टाइप में डिसेरिएलाइज़ नहीं कर सकता क्योंकि टाइप को सही ढंग से डिसेरिएलाइज़ करने के लिए JSON ऑब्जेक्ट (जैसे {"name":"value"}) की आवश्यकता होती है।

एपीआई से JSON परिणाम:

[
    [
        {
            "Col1": "Value",
            "Col2": "Value",
            "Col3": "Value",
            "Col4": [
                {
                    "Value": [
                        {}
                    ]
                },
                {
                    "Value": [
                        {}
                    ]
                }
            ],
            "Col5": "Value"
        }
    ],
    [
        {
            "Col1": "Value",
            "Col2": "Value",
            "Col3": "Value",
            "Col5": "Value"
         }
     ],
     [
        {
            "Col1": "Value",
            "Col2": "Value",
            "Col3": "Value",
            "Col4": [
                {
                    "Value": [
                        {}
                    ]
                },
                {
                    "Value": [
                        {}
                    ]
                 }
             ],
             "Col5": "Value"
        }
    ]
]

मेरा नियंत्रक

[HttpGet, ActionName("GetData")]
public async Task<IActionResult> GetReport()
{
    return this.Json(await _cuRepo.GetReportAsync("https://apiurlforcall/report"));
}

कोष

public async Task<IEnumerable<T>> GetReportAsync(string url)
{
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Add("Token", "apiToken");
        HttpResponseMessage response = await client.GetAsync(url);
        if (response.StatusCode == System.Net.HttpStatusCode.OK)
        {
            //jsonString is populated with the above JSON result
            var jsonString = await response.Content.ReadAsStringAsync();
            return JsonConvert.DeserializeObject<IEnumerable<T>>(jsonString);
        }
        else
            return null;
    }
}

AjaxCall (मैं क्या करने की कोशिश कर रहा हूँ)

$.ajax({
    url: "Controller/GetData",
    data: {},
    method: "GET",
    success: function (data) {
        var json = data;
        var html = "";

        for (var x = 0; x < json.length; x++) {
            html += "<tr><td>" + json[x].Col1+ "</td><td>" + json[x].Col2+ "</td></tr>";
        }
        $('#MyTable').html("");
        $('#MyTable').html(html);
        console.log(json);
    }
});

सच कहूं तो, मुझे नेट कोर के साथ बहुत अधिक अनुभव नहीं है, मैं इस प्रोजेक्ट को करके सीखने की कोशिश कर रहा हूं लेकिन यह मुद्दा एक बड़ा रोड़ा है और मैं एक तरह से खो गया हूं।

1
User1899289003 11 जिंदा 2021, 08:31

2 जवाब

सबसे बढ़िया उत्तर

आप ऐसा कर सकते हैं:

मॉडल:

public class Cols
    {
        public string  Col1 { get; set; }
        public string Col2 { get; set; }
        public string Col3 { get; set; }
        public List<Col4> Col4 { get; set; }
        public string Col5 { get; set; }

        
    }
    public class Col4
    {
        public List<Col> Value { get; set; }
    }
    public class Col
    { 

    }

परिवर्तन

return JsonConvert.DeserializeObject<IEnumerable<T>>(jsonString);

प्रति

return JsonConvert.DeserializeObject<List<List<Cols>>>(jsonString);

अपडेट करें:

1.बदलें

public async Task<IEnumerable<T>> GetReportAsync(string url)

प्रति

public async Task<List<List<Cols>>> GetReportAsync(string url)

2.बदलें

var json = data;

प्रति

var json = data[0];

3.बदलें

html += "<tr><td>" + json[x].Col1+ "</td><td>" + json[x].Col2+ "</td></tr>";

प्रति

html += "<tr><td>" + json[x].col1+ "</td><td>" + json[x].col2+ "</td></tr>";
2
Yiyi You 11 जिंदा 2021, 10:22

आप अपने जेसन को deserialize करने के लिए नीचे की कक्षा का उपयोग कर सकते हैं:

public class DataObject
    {
        public ColDetails[][] MyData { get; set; }
    }

    public class ColDetails
    {
        public string Col1 { get; set; }
        public string Col2 { get; set; }
        public string Col3 { get; set; }
        public Col4[] Col4 { get; set; }
        public string Col5 { get; set; }
    }

    public class Col4
    {
        public Value[] Value { get; set; }
    }

    public class Value
    {
    }

फिर, अपनी कक्षा में कनवर्ट करने के बाद जो वस्तु आप चाहते हैं उसे वापस कर दें।

Deserialize करने के लिए नीचे दिए गए कोड का प्रयोग करें:

JsonConvert.DeserializeObject<DataObject>(jsonString);
1
Manprit Singh Sahota 11 जिंदा 2021, 10:00