No Description

ebakhtin b0ba21257c first 6 months ago
Program.cs b0ba21257c first 6 months ago
lab5_file_types.csproj b0ba21257c first 6 months ago
lab5_file_types.sln b0ba21257c first 6 months ago
readme.md b0ba21257c first 6 months ago

readme.md

Чтение CSV

using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration;

using (var reader = new StreamReader("./test.csv")) {
    using (var csv = new CsvReader(
               reader, CultureInfo.InvariantCulture))
    {
        var records = csv.GetRecords<Foo>();
        foreach (var record in records) {
            Console.WriteLine("{0}, {1}", record.description, record.value);
        }
    }
}

public class Foo
{
    public string description { get; set; }
    public double value { get; set; }
}

Результат:

строка с пробелами, 123,15
строка      
с переносом 
строки, 456 

Запись в CSV

using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration;

// использую не стандартный формат
var config = new CsvConfiguration(
    CultureInfo.InvariantCulture) { 
    Delimiter = ";", 
    HasHeaderRecord = false };

// создаю тестовые данные
var records = new List<Foo>
{
    new Foo { 
        description ="тест записи\nмногострочного текста",
        value = 12.34 },
    new Foo { 
        description = "просто, текст, с запятыми", 
        value = 0 }
};

using (var writer = new StreamWriter("./test3.csv"))
using (var csv = new CsvWriter(writer, config))
{
    csv.WriteRecords(records);
}

public class Foo
{
    public string description { get; set; }
    public double value { get; set; }
}

Результат в файле:

"тест записи
многострочного текста";12.34
просто, текст, с запятыми;0

Newtonsoft.Json Сериализация

using Newtonsoft.Json;

var person = new Person
{
    name = "Имя",
    age = 18,
    date = "2024-03-07"
};

string json = JsonConvert.SerializeObject(
    person, Formatting.Indented);

Console.WriteLine(json);

class Person
{
    public string name { get; set; }
    public int age { get; set; }
    public string date { get; set; }
}

Результат:

{                     
  "name": "Имя",      
  "age": 18,          
  "date": "2024-03-07"
}         

Сериализация JSON. DataContractJsonSerializer.

using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

var PersonList = new List<Person>() {
    new Person {name="Иванов", age=25, date=new DateTime(2021,1,1)},
    new Person {name="Петров", age=35, date=new DateTime(2021,1,2)}
};

// создаем объект сериализатора, указав, что на входе 
// будет МАССИВ объектов Person
var Serializer = new DataContractJsonSerializer(typeof(Person[]));

using (var streamWriter = new StreamWriter("test1.json"))
{
    Serializer.WriteObject(
        streamWriter.BaseStream,
        // Преобразуем список (List) объектов в МАССИВ
        PersonList.ToArray()
    );
}

[DataContract]
internal class Person
{
    [DataMember]
    public string name;

    [DataMember]
    public int age;

    [DataMember]
    public DateTime date;
}

Результат в cозданном JSON файле:

[{"age":25,"date":"\/Date(1609448400000+0300)\/","name":"Иванов"},{"age":35,"date":"\/Date(1609534800000+0300)\/","name":"Петров"}]

Десериалзиаця JSON. DataContractJsonSerializer.

using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

var Serializer = new DataContractJsonSerializer(typeof(Person[]));
using (var sr = new StreamReader("test1.json"))
{
    var PersonList = (Person[])Serializer.ReadObject(sr.BaseStream);
}


[DataContract]
internal class Person
{
    // создаем приватную переменную для хранения даты
    private DateTime privateDate;

    [DataMember]
    public string name { get; set; }

    [DataMember]
    public string age { get; set; }

    // создаем ПРИВАТНОЕ СТРОКОВОЕ свойство и с помощью атрибутов меняем ему имя для сериализатора
    [DataMember(Name = "date")]
    private string StringDate {
        get {
            return privateDate.ToString("yyyy-MM-dd");
        }
        set {
            // 2021-03-21
            // 0123456789
            privateDate = new DateTime(
                Convert.ToInt32(value.Substring(0, 4)),
                Convert.ToInt32(value.Substring(5, 2)),
                Convert.ToInt32(value.Substring(8, 2))
            );
        } 
    }

    // публичное свойство "дата" скрываем от сериализатора
    [IgnoreDataMember]
    public DateTime date { 
        get { return privateDate; }
        set { privateDate = value;  } 
    }
}

Пример сериализации JSON. Newtonsoft.Json

using Newtonsoft.Json;

Person person1 = new Person
{
    Name = "Влад",
    LastName = "Анисимов",
    Age = 19,
    Birtday = new DateTime(2003, 02, 19).ToShortDateString().ToString()
};

string json = JsonConvert.SerializeObject(person1, Formatting.Indented);
Console.WriteLine(json);

public class Person
{
    public string Name { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    public string Birtday { get; set; }
}

Результат:

{                        
"Name": "Влад",        
"LastName": "Анисимов",
"Age": 19,             
"Birtday": "19.02.2003"
}      

Пример десериализации JSON. Newtonsoft.Json

using Newtonsoft.Json;

string json = @"{""Name"":""Влад"",""LastName"":""Иванов"",""Age"":19, ""Birthday"":""2003.02.18""}";
Person person1 = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(person1.Name);
Console.WriteLine(person1.LastName);
Console.WriteLine(person1.Age);
Console.WriteLine(person1.Birthday);

public class Person
{
    public string Name { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    public string Birthday { get; set; }
}

Результат:

Влад
Иванов    
19        
2003.02.18