Dlaczego serializacja Json.NET kończy się niepowodzeniem z [Serializable] i lambda wewnątrz właściwości tylko do odczytu?
Wedługte informacje o wydaniu, Json.NET obsługuje teraz SerializableAttribute:
Json.NET wykrywa teraz typy, które mają SerializableAttribute i serializuje wszystkie pola tego typu, zarówno publiczne, jak i prywatne, i ignoruje właściwości.
Mam następujący przykładowy kod, który zgłasza aJsonSerializationException
:
Błąd podczas pobierania wartości z „CS $ <> 9__CachedAnonymousMethodDelegate1” na „ConsoleApplication1.MyType”.
Jeśli komentuję właściwość TotalWithLambda, serializacja powiedzie się zgodnie z oczekiwaniami. W rzeczywistości otrzymuję następujące wyniki:
Pozostaw [Serializable], zostaw TotalWithLambda: zgłasza JsonSerializationExceptionZostaw [Serializable], usuń TotalWithLambda: serializuje tylko „myList”Usuń [Serializable], zostaw TotalWithLambda: serializuje „myList”, „Total” i „TotalWithLambda”Usuń [Serializable], usuń TotalWithLambda: serializuje „myList” i „Total”Rozumiem wszystkie te przypadki z wyjątkiem pierwszego. Dlaczego połączenie [Serializable] i właściwości tylko do odczytu z lambda w nim powoduje ten wyjątek?
<code>namespace ConsoleApplication1 { using System; using System.Collections.Generic; using System.Linq; using Newtonsoft.Json; class Program { static void Main(string[] args) { var foo = new MyType(); foo.myList = new List<int>() { 0, 1, 2, 3 }; var returnVal = JsonConvert.SerializeObject(foo); Console.WriteLine("Return: " + returnVal.ToString()); Console.ReadKey(); } } [Serializable] class MyType { public IList<int> myList; public int Total { get { return this.myList.Sum(); } } public int TotalWithLambda { get { return this.myList.Sum(x => x); } } } } </code>