2014-09-11 13 views
13

Tôi cần đọc tệp cấu hình JSON, sửa đổi giá trị và sau đó lưu JSON đã sửa đổi trở lại tệp. JSON là đơn giản như nó được:Làm cách nào để lưu tệp JSON có bốn dấu cách thụt lề bằng cách sử dụng JSON.NET?

{ 
    "test": "init", 
    "revision": 0 
} 

Để tải dữ liệu và sửa đổi các giá trị tôi làm điều này:

var config = JObject.Parse(File.ReadAllText("config.json")); 
config["revision"] = 1; 

Cho đến nay rất tốt; bây giờ, để viết JSON trở lại tệp. Trước tiên, tôi đã thử điều này:

File.WriteAllText("config.json", config.ToString(Formatting.Indented)); 

Ghi tệp chính xác, nhưng thụt đầu dòng chỉ có hai khoảng trắng.

{ 
    "test": "init", 
    "revision": 1 
} 

Từ các tài liệu, có vẻ như không có cách nào để vượt qua bất kỳ tùy chọn khác theo cách này, vì vậy tôi cố gắng sửa đổi this example mà sẽ cho phép tôi để trực tiếp đặt IndentationIndentChar thuộc tính của JsonTextWriter để xác định số tiền của thụt đầu dòng:

using (FileStream fs = File.Open("config.json", FileMode.OpenOrCreate)) 
{ 
    using (StreamWriter sw = new StreamWriter(fs)) 
    { 
     using (JsonTextWriter jw = new JsonTextWriter(sw)) 
     { 
      jw.Formatting = Formatting.Indented; 
      jw.IndentChar = ' '; 
      jw.Indentation = 4; 

      jw.WriteRaw(config.ToString()); 
     } 
    } 
} 

Nhưng điều đó dường như không có bất kỳ ảnh hưởng nào: tệp vẫn được viết với hai khoảng trống thụt lề. Tôi đang làm gì sai?

Trả lời

12

Vấn đề là bạn đang sử dụng config.ToString(), do đó đối tượng đã được đăng vào một chuỗi và định dạng khi bạn viết nó bằng cách sử dụng JsonTextWriter.

Sử dụng một serialiser để serialise đối tượng để các nhà văn thay vì:

JsonSerializer serializer = new JsonSerializer(); 
serializer.Serialize(jw, config); 
+0

Vâng, đây là nó: bây giờ bạn đã chỉ ra nó có ý nghĩa hoàn toàn. Cảm ơn! –

Các vấn đề liên quan