2014-10-30 12 views
10

Podczas korzystania z biblioteki Json.NET można określić formatowanie podczas szeregowania ciągów, ale nie mogę znaleźć tej opcji podczas szeregowania bezpośrednio do strumienia. Czy czegoś brakuje?Czy JS.NET może serializować, aby przesyłać strumieniowo za pomocą funkcji Formatowanie?

Kod dla dwóch metod serializacji jest następujący:

public static string Serialize(MyObject obj) 
{ 
    JsonSerializerSettings settings = GetJsonSerializerSettings(); 
    return JsonConvert.SerializeObject(obj, Formatting.Indented, settings); 
} 

public static void SerializeToStream(MyObject obj, Stream stream) 
{ 
    var serializer = JsonSerializer.Create(GetJsonSerializerSettings()); 

    using (var sw = new StreamWriter(stream)) 
    using (var jsonTextWriter = new JsonTextWriter(sw)) 
    { 
     serializer.Serialize(jsonTextWriter, obj); 
    } 
} 

private static JsonSerializerSettings GetJsonSerializerSettings() 
{ 
    JsonSerializerSettings settings = new JsonSerializerSettings 
    { 
     Converters = new List<JsonConverter> 
     { 
      new StringEnumConverter() 
     } 
    }; 
    return settings; 
} 

Odpowiedz

7

nie próbowałem, ale będę oczekiwać, że będzie w porządku, jeśli można określić formatowanie w ustawieniach:

public static void SerializeToStream(MyObject obj, Stream stream) 
{ 
    var settings = GetJsonSerializerSettings(); 
    settings.Formatting = Formatting.Indented; 
    var serializer = JsonSerializer.Create(settings); 

    using (var sw = new StreamWriter(stream)) 
    using (var jsonTextWriter = new JsonTextWriter(sw)) 
    { 
     serializer.Serialize(jsonTextWriter, obj); 
    } 
} 

(Lub zmień GetJsonSerializerSettings w podobny sposób, oczywiście.)

+0

Witaj! Właśnie ciekawy dlaczego zrobiłeś tę metodę 'statyczną'. Dzięki! – 8protons

+0

@ 8protons: Dlaczego nie chcesz, żeby był statyczny? Nie musi mieć dostępu do żadnego stanu instancji i nie implementuje interfejsu lub czegoś podobnego, w którym dziedziczenie jest użyteczne. –

+0

_ "Cóż, dlaczego nie chciałbyś, żeby to było statyczne?" _... Dlaczego retoryczne pytanie? Pytałam, bo nie wiedziałam. Nie przychodziłeś do ciebie, by kwestionować swój autorytet w tej sprawie. – 8protons