Помогите привести код к подобному виду
Нужно создать класс, чтобы после сериализации он выглядел как в первом блоке кода. Как работать с json и xml я понимаю, вопрос в создании класса. Русский язык используется только для примера.
Требуется чтобы был один класс, в идеале. Для того чтобы его как один объект сериализовать.
{
"Пользователь":{
"Факультет": "Тестовый факультет",
"Корпус": "Корпус тестового факультета",
"Кабинет": "100",
"Название кабинета": "Деканат тестового факультета",
"Инвентарный номер": 00006969,
"Используется для":[
"Управление, организ. Уч. проц-в"
],
"Подключен к интернету": "Да",
"Подключен к мультимедиа": "Да",
"Количество пользователей": 1,
"ФИО пользователей":[
"Павлов А.И."
],
"Примечание": "Все работает"
},
"Компьютер":{
"Имя компьютера": "COMPUTER",
"Имя пользователя": "User",
"Процессор": "Pentium(R) Dual-Core CPU E666 @ 3.33GHz",
"Оперативная память": 4096,
"Объем жестких дисков": 1006,
"Видеокарта": "NVIDIA GeForce 710",
"Операционная система": "Windows 8.1",
"Устройства вывода изображения": "Универсальный монитор PnP",
"Физические адреса": [
"IPv4":[
"192.168.73.1",
"192.168.96.1"
],
"IPv6":[
"00:00:00:00:00:00:00:E0",
"00:00:00:00:00:00:00:E0"
],
"MAC":[
"0A:00:27:00:00:4C",
"0A:00:27:00:00:4A"
]
]
}
}
Как я примерно это вижу
SystemInfoContainer sic = new SystemInfoContainer();
sic.User.Faculty = "Тестовый факультет";
sic.Hardware.Username = "Username";
XmlSerializer xml = new XmlSerializer(typeof(SystemInfoContainer));
using (FileStream fs = new FileStream("SystemInfo.xml", FileMode.OpenOrCreate))
{
xml.Serialize(fs, sic);
}
Ответы (2 шт):
using System.Collections.Generic;
using System.IO;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Unicode;
namespace JsonSerializeExample
{
public class Workplace
{
[JsonPropertyName("Пользователь")]
public User User { get; set; }
[JsonPropertyName("Компьютер")]
public Computer Computer { get; set; }
}
public class User
{
[JsonPropertyName("Используется для")]
public List<string> UsedFor { get; set; }
}
public class Computer
{
[JsonPropertyName("Имя компьютера")]
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
var workplace = new Workplace
{
User = new User
{
UsedFor = new List<string> { "Управление, организ. Уч. проц-в" },
},
Computer = new Computer
{
Name = "COMPUTER",
},
};
var options = new JsonSerializerOptions
{
WriteIndented = true,
Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.Cyrillic),
};
var json = JsonSerializer.Serialize(workplace, options);
File.WriteAllText("workplace.json", json);
}
}
}
{
"Пользователь": {
"Используется для": [
"Управление, организ. Уч. проц-в"
]
},
"Компьютер": {
"Имя компьютера": "COMPUTER"
}
}
Остальное по образу и подобию :) P.S. Кириллица в именах свойств - зашквар, но надо - так надо :)
Почитав несколько статей, просмотрев несколько видео вроде как теперь имею понятие как это сделать.
Спустя несколько часов, нашел вот этот прекрасный сайт https://json2csharp.com/.
Вот мой класс:
using System.Collections.Generic;
namespace JSONTest
{
public class SystemInfoContainer
{
public User UserInfo { get; set; }
public Computer HardwareInfo { get; set; }
}
public class User
{
public string Faculty { get; set; }
public string Corpus { get; set; }
public string Cabinet { get; set; }
public string CabinetName { get; set; }
public string InventoryNumber { get; set; }
public List<string> UsedFor { get; set; }
public bool IsConnected { get; set; }
public bool IsMultimedia { get; set; }
public bool IsScienceDevices { get; set; }
public List<string> UsersFullNames { get; set; }
public string Additions { get; set; }
}
public class PhysAddr
{
public IList<string> IPv4Addresses { get; set; }
public IList<string> IPv6Addresses { get; set; }
public IList<string> MACAddresses { get; set; }
}
public class Computer
{
public string Name { get; set; }
public string Userame { get; set; }
public string Processor { get; set; }
public int RAM { get; set; }
public int HDD { get; set; }
public string Videocard { get; set; }
public string OS { get; set; }
public string Output { get; set; }
public IList<PhysAddr> PhysicalAddresses { get; set; }
}
}
Вот мой код для создания объекта:
SystemInfoContainer sysinf = new SystemInfoContainer();
sysinf.UserInfo = new User()
{
Faculty = "Тестовый факультет",
Corpus = "Корпус тестового факультета",
Cabinet = "100",
CabinetName = "Деканат тестового факультета",
InventoryNumber = "00006969",
UsedFor = new List<string> { "Управление, организ. Уч. проц-в" },
IsConnected = true,
IsMultimedia = true,
IsScienceDevices = false,
UsersFullNames = new List<string> { "Павлов А.И." },
Additions = "Все работает"
};
sysinf.HardwareInfo = new Computer()
{
Name = "COMPUTER",
Userame = "User",
Processor = "Pentium(R) Dual-Core CPU E666 @ 3.33GHz",
RAM = 4096,
HDD = 1006,
Videocard = "NVIDIA GeForce 710",
OS = "Windows 8.1",
Output = "Универсальный монитор PnP",
PhysicalAddresses = new List<PhysAddr>()
{
new PhysAddr() {
IPv4Addresses = new List<string>()
{
"192.168.73.1",
"192.168.96.1"
},
IPv6Addresses = new List<string>()
{
"00:00:00:00:00:00:00:E0",
"00:00:00:00:00:00:00:E0"
},
MACAddresses = new List<string>()
{
"0A:00:27:00:00:4C",
"0A:00:27:00:00:4A"
}
}
}
};
Всем спасибо за советы и за первый ответ который помог мне понять как они работают.