मैं वर्तमान में ASP.NET वेब API से ASP.NET कोर में एक API माइग्रेट कर रहा हूं। मेरे पुराने एपीआई में शरीर के हिस्से के रूप में एक सूची स्वीकार करने वाला एंडपॉइंट था:

public IHttpActionResult Post(MyModel model)
{
    ...
}

public class MyModel
{
    public List<SomeObject> SomeObjects { get; set; }
}

मेरे पास इस एपीआई के कुछ उपभोक्ता हैं जो निम्नलिखित JSON पोस्ट करने में सक्षम थे:

POST /post
{
    "someObjects": {}
}

बेशक, यह होना चाहिए था:

POST /post
{
    "someObjects": []
}

लेकिन ASP.NET वेब एपीआई मॉडल बाइंडिंग ने इसे स्वीकार कर लिया (someObjects से null मुझे लगता है' सेट करना)।

ASP.NET कोर के साथ ऐसा करते समय, मुझे एक ही JSON को API पर पोस्ट करते समय निम्न त्रुटि मिलती है:

Cannot deserialize the current JSON object (e.g. {\"name\":\"value\"}) into type 'System.Collections.Generic.List`1[SomeObject]'

फिर से, मैं पूरी तरह से समझता हूं कि त्रुटि क्यों है। मुझे पिछड़ा संगत होना चाहिए, तो क्या कोई मदद कर सकता है? मुझे लगता है कि मुझे एक कस्टम मॉडल बाइंडर या कुछ चाहिए ताकि खाली वस्तु को null या एक खाली सूची में परिवर्तित किया जा सके?

0
ThomasArdal 12 सितंबर 2019, 10:07

1 उत्तर

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

यह एक साफ समाधान नहीं है लेकिन आप List<SomeObject> के लिए एक कस्टम JsonConverter लिख सकते हैं और सूची नहीं होने पर शून्य या खाली सूची वापस कर सकते हैं:

public class CustomConverter : JsonConverter<List<SomeObject>>
{
    public override List<SomeObject> ReadJson(JsonReader reader, Type objectType, List<SomeObject> existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        JToken token = JToken.Load(reader);
        if (token.Type == JTokenType.Array)
        {
            return token.ToObject<List<SomeObject>>();
        }
        return null;
    }

    public override void WriteJson(JsonWriter writer, List<SomeObject> value, JsonSerializer serializer)
    {
        serializer.Serialize(writer, value);
    }
}

public class MyModel
{
    [JsonConverter(typeof(CustomConverter))]
    public List<SomeObject> SomeObjects { get; set; }
}
1
ThomasArdal 12 सितंबर 2019, 10:02