예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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
            }
        }
예제 #4
0
 protected virtual void SetWriterOptions(JsonTextWriterEx writer)
 {
 }