عندما يكون لدي مجموعة مهيأة باستخدام 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());
}
}
}
أعتقد أن هذا تم إصلاحه في https://www.nuget.org/packages/Newtonsoft.Json/12.0.3-beta2
اختبرناها ويبدو أنها تعمل مع التصحيح. بالطبع ، السؤال التالي هو ما الذي تتخيله للإفراج؟ نظرًا لأنه يكسر أي شخص يستخدم .NET Core 3 ، يبدو أنه تصحيح مهم للخروج.
شكرا.
أي تحديث؟ لا أرى معالم ، لذا فأنا لست متأكدًا من الخطة.
لا يزال هذا يبدو وكأنه مشكلة ، لذلك نفس السؤال المذكور أعلاه. تحديثا. تستخدم قاعدة الكود لدينا وظائف Json.NET على نطاق واسع ، لذا فإن التبديل إلى System.Text.Json ليس خيارًا جذابًا.
التعليق الأكثر فائدة
اختبرناها ويبدو أنها تعمل مع التصحيح. بالطبع ، السؤال التالي هو ما الذي تتخيله للإفراج؟ نظرًا لأنه يكسر أي شخص يستخدم .NET Core 3 ، يبدو أنه تصحيح مهم للخروج.
شكرا.