2013-06-04 2 views
85

Привет, мне нужно записать следующие данные в текстовый файл с использованием Json-формата в C#? Кронштейны имеют важное значение, чтобы быть в силе JSON форматеКак написать Json-файл в C#?

[ 
    { 
    "Id": 1, 
    "SSN": 123, 
    "Message": "whatever" 

    }, 
    { 
    "Id": 2, 
    "SSN": 125, 
    "Message": "whatever" 
    } 
] 

и вот моя модель класса

public class data 
{ 
    public int Id { get; set; } 
    public int SSN { get; set; } 
    public string Message {get; set;} 

} 

ответ

148

Я бы рекомендовал Json.Net, смотрите пример ниже:

List<data> _data = new List<data>(); 
_data.Add(new data() 
{ 
    Id = 1, 
    SSN = 2, 
    Message = "A Message" 
}); 

string json = JsonConvert.SerializeObject(_data.ToArray()); 

//write string to file 
System.IO.File.WriteAllText(@"D:\path.txt", json); 

или немного более эффективной версии вышеприведенного кода (не использует строку в качестве буфера):

//open file stream 
using (StreamWriter file = File.CreateText(@"D:\path.txt")) 
{ 
    JsonSerializer serializer = new JsonSerializer(); 
    //serialize object directly into file stream 
    serializer.Serialize(file, _data); 
} 

Документация: Serialize JSON to a file


Почему? Вот feature comparision between common serialisers as well as benchmark tests † ‡.

Ниже приведен график выполнения взяты из связанного статьи:

enter image description here

Это seperate post, утверждает, что:

Json.NET всегда была память эффективным, потоковое чтение и написав большие документы, а не загружая их полностью в память, но мне удалось найти пару ключевых мест, где можно было бы уменьшить выделение объектов ...... (сейчас) Json.Net (6.0) выделяет 8 раз меньше памяти, чем JavaScriptSerializer

‡.

† Бенчмарки кажутся Json.Net 5, текущая версия (на момент написания статьи) 10. Какой версии стандартных .Net serialisers используемого не упоминаются

‡ Этих тесты, очевидно, от разработчиков, которые поддерживают эту библиотеку. Я не подтвердил их претензии. Если сомневаетесь, проверьте их самостоятельно.

+1

Как JSON.NET отличаются от встроенной поддержки, предоставляемой классами JavaScriptSerializer и DataContractJsonSerializer? –

+0

@RobertHarvey Мне было проще в использовании и более надежным. Я считаю, что Microsoft соглашается, поскольку я думаю, что они планируют реализовать это в основной системе. Я также считаю, что это намного быстрее. Я видел какую-то статистику где-то, чтобы поддержать это, но у меня нет их в данный момент. – Liam

+0

, и он лучше подходит к датам, http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx – Liam

37

Пример в ответ Лиама сохраняет файл как строки в одной строке. Я предпочитаю добавлять форматирование. Кто-то в будущем может захотеть изменить какое-то значение вручную в файле. Если вы добавите форматирование, это будет проще сделать.

Следующая добавляет основные JSON отступы:

string json = JsonConvert.SerializeObject(_data.ToArray(), Formatting.Indented); 
2
var responseData = //Fetch Data 
string jsonData = JsonConvert.SerializeObject(responseData, Formatting.None); 
System.IO.File.WriteAllText(Server.MapPath("~/JsonData/jsondata.txt"), jsonData); 
Смежные вопросы