Он сам понимает, какой тип данных передан и пишет в нужном формате. При чтении просто указываем нужный формат и оно само вычитывается и кастится (или конвертится).
А можно туда как-то добавить свой тип, который он писать/читать не умеет?
Чтобы можно было делать так:
Мне надо не весь класс, а просто отдельный enum в JSON и обратно.
Могу легко вручную. Но должен же быть способ.
Или надо к инаму метод FromString(string) прикрутить. Вероятно, через методы расширения.
Похоже, что оно только с коллекциями работает Одиночный объект не даёт сконвертить.
Точнее, это не то что мне надо. Оно просто конвертит все поля инама в текстовый массив (и обратно). Не понятно, зачем это надо
А мне надо, например
Keys k = Keys.A;
записать значение k в JSON и вычитать обратно. Только enum будет свой.
Вручную это вообще просто сделать, только кода много будет.
Для просто значения и в самом .NET есть .ToString и Enum.Parse.
JSON это либо объект, либо список.
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
namespace ConsoleApp9
{
class MyClass
{
public StringComparison a;
public int b;
}
class Program
{
static void Main(string[] args)
{
string json = JsonConvert.SerializeObject(
new MyClass { a = StringComparison.Ordinal, b = 42 },
new StringEnumConverter() // чтоб енумы были в виде строк
);
Console.WriteLine(json);
var obj = JsonConvert.DeserializeObject<MyClass>(
json,
new StringEnumConverter()
);
Console.WriteLine(obj.a);
}
}
}
Для своих данных проще класс создать, а не ковыряться вручную.
Частичная десереализация это больше для случаев когда пришел большой JSON извне и нужна только его небольшая часть.
Видимо, да Но моя идеология в том, что конфиги всегда должны быть доступны для ручного редактирования. А если какой-то параметр отсутствует или содержит недопустимое значение - заменить на дефолт. Всегда так писал и буду писать А при автоматической десериализации все параметры должны быть на месте, вроде
Например, из-за отсутствующего или повреждённого конфига NFS 3 вообще не запускается. Хотя, там конфиг весит около 500 байт, КАРЛ!
По-моему, так делать это лютейший зашквар.