La sérialisation d'un objet à l'aide de Json.Net les causes de la Mémoire exception

Disclaimer: je ne suis passé par la plupart de la solution proposée ici, mais la plupart d'entre eux étaient en train de parler à propos de OOM exception lors de la Désérialisation.

Je suis en train de sérialiser un objet( c'est un Arbre) en Json à l'aide de Json.Net. Tout fonctionne bien pour les petits objets, mais je reçois OOM exception quand je l'ai essayer avec de gros objets. Il fonctionne avec les plus petits objets de même type de données que je suis en supposant que il n'y a pas de référence circulaire (j'ai fait inspecter ma structure de données). Est-il un moyen où je peux convertir mon objet dans un flux de données ( c'est une application du Windows Store ) et de générer du Json à l'aide de ce flux ?

 public static async Task<bool> SerializeIntoJson<T>(string fileName, StorageFolder destinationFolder, Content content)
    {
        ITraceWriter traceWriter = new MemoryTraceWriter();
        try
        {

            string jsonString = JsonConvert.SerializeObject(content, Formatting.Indented, new JsonSerializerSettings
            {
                PreserveReferencesHandling = PreserveReferencesHandling.Objects,
                TypeNameHandling = TypeNameHandling.All,
                Error = ReportJsonErrors,
                TraceWriter = traceWriter,
                StringEscapeHandling = StringEscapeHandling.EscapeNonAscii
            });
            System.Diagnostics.Debug.WriteLine(traceWriter);

            StorageFile file = await destinationFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
            await Windows.Storage.FileIO.WriteTextAsync(file, jsonString);
            return true;
        }
        catch (NullReferenceException nullException)
        {
            System.Diagnostics.Debug.WriteLine(traceWriter);
            logger.LogError("Exception happened while serializing input object, Error: " + nullException.Message);
            return false;
        }
        catch (Exception e)
        {
            System.Diagnostics.Debug.WriteLine(traceWriter);
            logger.LogError("Exception happened while serializing input object, Error: " + e.Message, e.ToString());
            return false;
        }
    }

Afin de convertir mon objet dans les cours d'eau, le code que j'ai trouvé à l'aide d'un BinaryFormatter qui n'est pas disponible dans l'app store de Windows dll.

Essayez d'utiliser un JsonSerializer combiné avec un StreamReader comme indiqué here.
Je n'ai regardé le code et qui m'a amené à la question : Est-il possible où je peux convertir mon objet dans un flux de données ( c'est une application du Windows Store )?
C'est ce que le Sérialiseur. Il prend toutes les propriétés et les convertit en des chaînes. Dans ce cas, au lieu de retourner chaînes qu'il peut les déposer directement dans un cours d'eau (comme un fichier de flux), de sorte qu'ils ne sont pas assis dans la mémoire.
Ok cela a fonctionné, j'ai eu l'TraceListner qui a été la création de chaînes en interne avec chacun de sérialisation et de désérialisation.
Peut-être que Nate Diamant pourrait ajouter une réponse, de sorte qu'il peut être accepté. A fonctionné pour moi aussi!

OriginalL'auteur Jack_2060 | 2014-09-30