Newtonsoft.json: فشل DeserializeObject في .NET Core 3 عند تهيئة المجموعة باستخدام Enumerable.Empty

تم إنشاؤها على ١٥ أكتوبر ٢٠١٩  ·  4تعليقات  ·  مصدر: JamesNK/Newtonsoft.Json

عندما يكون لدي مجموعة مهيأة باستخدام Enumerable.Empty ثم DeserializeObject رميات:

Unhandled exception. Newtonsoft.Json.JsonSerializationException: Cannot create and populate list type System.Linq.EmptyPartition`1[System.String]. Path 'Values', line 1, position 11.

إذا قمت بتغيير التهيئة إلى شيء آخر (مثل new List<string>() ) فإنه يعمل. نجح هذا في الإصدارات السابقة من .NET ، ولكن يبدو الآن أنه فشل في .NET Core 3.

الريبو الكامل:

namespace ConsoleApp1
{
    public class Foo
    {
        public IEnumerable<string> Values { get; set; } = Enumerable.Empty<string>();
    }

    class Program
    {
        static void Main(string[] args)
        {
            var f1 = new Foo { Values = new[] { "apple", "banana", "carrot" } };
            var json = JsonConvert.SerializeObject(f1);
            Console.WriteLine(json);

            var f2 = JsonConvert.DeserializeObject<Foo>(json);
            Console.WriteLine(f2.Values.Count());
        }
    }
}

التعليق الأكثر فائدة

اختبرناها ويبدو أنها تعمل مع التصحيح. بالطبع ، السؤال التالي هو ما الذي تتخيله للإفراج؟ نظرًا لأنه يكسر أي شخص يستخدم .NET Core 3 ، يبدو أنه تصحيح مهم للخروج.

شكرا.

ال 4 كومينتر

أعتقد أن هذا تم إصلاحه في https://www.nuget.org/packages/Newtonsoft.Json/12.0.3-beta2

اختبرناها ويبدو أنها تعمل مع التصحيح. بالطبع ، السؤال التالي هو ما الذي تتخيله للإفراج؟ نظرًا لأنه يكسر أي شخص يستخدم .NET Core 3 ، يبدو أنه تصحيح مهم للخروج.

شكرا.

أي تحديث؟ لا أرى معالم ، لذا فأنا لست متأكدًا من الخطة.

لا يزال هذا يبدو وكأنه مشكلة ، لذلك نفس السؤال المذكور أعلاه. تحديثا. تستخدم قاعدة الكود لدينا وظائف Json.NET على نطاق واسع ، لذا فإن التبديل إلى System.Text.Json ليس خيارًا جذابًا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات