public static void SerializeToFile(object obj, string fileName) { string tempFileName = fileName + ".tmp"; string backupFileName = fileName + ".bak"; try { using (var fileStream = File.Open(tempFileName, FileMode.Create, FileAccess.Write, FileShare.Read)) using (var streamWriter = new StreamWriter(fileStream)) using (var jsonWriter = new JsonTextWriterEx(streamWriter)) { jsonWriter.Formatting = Formatting.Indented; jsonWriter.Indentation = 2; jsonWriter.QuoteNameHandling = QuoteNameHandling.Auto; GetJsonSerializer().Serialize(jsonWriter, obj); jsonWriter.Flush(); } if (File.Exists(fileName)) { File.Replace(tempFileName, fileName, backupFileName); } else { File.Move(tempFileName, fileName); } } catch (Exception e) { Log.Error("Failed to save file '{0}'.".Fmt(fileName), e); } }
public static void SerializeToFile (object obj, string fileName) { string tempFileName = fileName + ".tmp"; string backupFileName = fileName + ".bak"; try { using (var fileStream = File.Open(tempFileName, FileMode.Create, FileAccess.Write, FileShare.Read)) using (var streamWriter = new StreamWriter(fileStream)) using (var jsonWriter = new JsonTextWriterEx(streamWriter)) { jsonWriter.Formatting = Formatting.Indented; jsonWriter.Indentation = 2; jsonWriter.QuoteNameHandling = QuoteNameHandling.Auto; GetJsonSerializer().Serialize(jsonWriter, obj); jsonWriter.Flush(); } if (File.Exists(fileName)) File.Replace(tempFileName, fileName, backupFileName); else File.Move(tempFileName, fileName); } catch (Exception e) { Log.Error("Failed to save file '{0}'.".Fmt(fileName), e); } }
private void SerializeToStream(T value, TextWriter textWriter) { JsonSerializer serializer = CreateJsonSerializer(); var context = JsonLinkedContext.Get(serializer.Context); RememberLinks(value, context); using (var jsonWriter = new JsonTextWriterEx(textWriter)) { jsonWriter.Formatting = Formatting.Indented; jsonWriter.Indentation = 2; jsonWriter.QuoteNameHandling = QuoteNameHandling.Auto; SetWriterOptions(jsonWriter); serializer.Serialize(jsonWriter, value); //await streamWriter.FlushAsync().ConfigureAwait(false); jsonWriter.Flush(); // Flush is the only truly async method, so there's no point in async hassle } }