Ни System.Text. Json, ни Newtonsoft. Json не поддерживают сериализацию классов stati c. Поэтому, хотя вы не можете сериализовать класс напрямую, вы можете сериализовать его члены.
Если вы можете использовать Newtonsoft. Json, то вы можете подобрать что-то подобное, по крайней мере, для десериализации и нечто подобное для сериализации. :
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
static class Config
{
public static string ServerIP = string.Empty;
}
static void DeserializeStaticClass(string json, Type staticClassType)
{
if (!staticClassType.IsClass)
throw new ArgumentException("Type must be a class", nameof(staticClassType));
if (!staticClassType.IsAbstract || !staticClassType.IsSealed)
throw new ArgumentException("Type must be static", nameof(staticClassType));
var document = JObject.Parse(json);
var classFields = staticClassType.GetFields(BindingFlags.Public | BindingFlags.Static);
foreach (var field in classFields)
{
var documentField = document[field.Name];
if (documentField == null)
throw new JsonSerializationException($"Not found in JSON: {field.Name}");
field.SetValue(null, documentField.ToObject(field.FieldType));
}
}
...
DeserializeStaticClass("{\"ServerIP\": \"localhost\"}", typeof(Config));
Если вам нужно настроить сериализацию вложенных элементов, вы можете передать JsonSerializer
в documentField.ToObject
.