serializeobject serialize serializar newtonsoft net jsonconvert example deserializar arrays json.net deserialization strong-typing

arrays - serialize - JSON.NET no puede manejar la deserialización de matriz simple?



serialize object newtonsoft c# (2)

Lo más probable es que te falte una llamada a ToObject(...) y un tipo de ToObject(...) . Esto debería funcionar:

class Test { public int Value; } class Program { static void Main(string[] args) { var array = new Test[2]; var instance = new Test {Value = 123}; array[0] = instance; array[1] = instance; var settings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.All }; string serialized = JsonConvert.SerializeObject(array, settings); // Explicitly call ToObject() and cast to the target type var deserialized = (Test[]) ((JArray)JsonConvert.DeserializeObject(serialized, settings)).ToObject(typeof(Test[])); Debug.Assert(deserialized[0].Value == 123); } }

Creé una clase simple con un campo. class Test{int value;}

Si utilizo la función "conservar referencias" y la configuro en "todos" (es decir, ambos objetos y matrices), cuando simplemente serializo una matriz de objetos Test, se serializa como un objeto JSON con un miembro especial "$ values" con los valores de matriz, junto con la propiedad "$ id" esperada para preservar la referencia de matriz. Eso está bien, pero una vez más todo rompe con la deserialización.

Al recorrer el código fuente, descubrí que, simplemente porque la prueba para " IsReadOnlyOrFixedSize " es verdadera, establece un createdFromNonDefaultConstructor " createdFromNonDefaultConstructor " en verdadero, lo que ni siquiera tiene sentido, porque aunque es una matriz de tamaño fijo, es creado a partir de un constructor predeterminado, a menos que considere que cualquier constructor de matriz de tamaño fijo sea un constructor no predeterminado. La conclusión es que debería ser capaz de manejar algo tan básico y, sin embargo, arroja este error: " Cannot preserve reference to array or readonly list, or list created from a non-default constructor ".

¿Cómo puedo deserializar una matriz básica conservando todas las referencias en JSON.NET sin obtener un error?


Tengo el mismo problema, utilicé List<T> lugar de T[] para arreglarlo.