Для сериализации в json использую newtonsoft. Мне надо сделать один такой раздел так, чтобы при нажатии кнопки появлялись два новых textbox(сколько угодно раз) и эти данные записывались в один.
Вот в этом блоке isp может быть сколько угодно name и ipaddress(наши появляющиеся дополнительно по нажатию кнопки). Можно ли это сделать?
Насколько я понимаю, Вам нужно создать класс и сериализовать его экземпляр в JSON. Для приведённого JSON класс может выглядеть следующим образом:
public class Isp {
public string Name { get; set; }
public List<System.Net.IPAddress> IPAddresses { get; set; }
}
public class Config {
public List<Isp> Isp { get; set; }
}
Далее просто сериализируете экземпляр класса Config в JSON и при необходимости создаёте экземпляр Config из JSON. Ниже приведены примеры сериализации и десериализации:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Text;
public static class NewtonsoftUtils {
public static T Deserialize<T>(string path) => Deserialize<T>(path, Encoding.UTF8, 65536, true);
public static T Deserialize<T>(string path, Encoding encoding, int bufferSize, bool detectEncodingFromBOM) {
// Размер буфера 64К дает гораздо лучшую производительность, чем
// размер буфера по умолчанию 4K.Его можно увеличить еще больше,
// но было обнаружено, что дальнейшее увеличение буфера не дает
// существенного прироста в производительности, а на некоторых
// системах может привести и к ее снижению.
int bs = bufferSize > 65536 || bufferSize < 0
? 65536
: bufferSize;
bool det = detectEncodingFromBOM;
string content = string.Empty;
using (var sr = new StreamReader(path, encoding, det, bs)) {
content = sr.ReadToEnd();
}
return JsonConvert.DeserializeObject<T>(content);
}
public static void Serialize(object obj, string path) => Serialize(obj, path, Encoding.UTF8, 65536);
public static void Serialize(object obj, string path, int bufferSize) => Serialize(obj, path, Encoding.UTF8, bufferSize);
public static void Serialize(object obj, string path, Encoding encoding, int bufferSize) {
Encoding enc = encoding ?? Encoding.UTF8;
// Размер буфера 64К дает гораздо лучшую производительность, чем
// размер буфера по умолчанию 4K.Его можно увеличить еще больше,
// но было обнаружено, что дальнейшее увеличение буфера не дает
// существенного прироста в производительности, а на некоторых
// системах может привести и к ее снижению.
int bs = bufferSize > 65536 || bufferSize < 0
? 65536
: bufferSize;
var serializer = new JsonSerializer {
Formatting = Formatting.Indented
};
Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path));
using (var sw = new StreamWriter(path, false, enc, bs))
using (var tw = new JsonTextWriter(sw)) {
//TODO: NullValueHandling add to parameters
// serializer.NullValueHandling = NullValueHandling.Ignore;
serializer.Serialize(tw, obj);
}
}
}
// пример использования
NewtonsoftUtils.Serialize(configInstance, path);
Config config = NewtonsoftUtils.Deserialize<Config>(path);
Для решения Вашей задачи необходимо создать форму создания экземпляра Isp, где для Isp.Name Вы можете использовать TextBox, а для Isp.IPAddresses - ListBox. После создания экземпляра Isp добавляете его в Config.Isp и сериализируете в JSON.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть ли способ решить следующую задачу в одну строку? или еще более компактно
Как вместо этого кода использовать FastSearchLibrary библиотеку? Просто этот код не ищет на диске С, даже если запускаю от имени администратора!...
В моем учебном заведении нет MySql, а лишь стандартные библиотекиКаким образом можно подключиться к удаленной БД на хосте, используя стандартные...