小编Itd*_*Itd的帖子

使用 System.Text.Json 将 IConfiguration 序列化回 Json

我将一些 IConfiguration 作为 json 存储在我的 sqlserver 数据库中,这样我就可以将它们绑定到一些已经构造的类以提供动态设置。

在某些时候,我可能会在运行时更改新的绑定属性,然后更新数据库。问题是,当我需要时,该类可能具有更多不应绑定且不应序列化的属性。因此,我将 IConfiguration 保留为我的类的属性。我使用这种方法的另一个原因是我需要从已加载配置的类中实例化其他子类,并在执行时将它们保存到数据库中。

问题是,当我序列化 IConfiguration 时,我只得到一个空的 json 字符串,如“{}”。我想我可以利用 .AsEnumerable() 做一些恶作剧,但没有更好的方法吗?

我的示例代码看起来有点像这样

public class ConfigurableClass
{

    public int ChildrenCount { get; set; } = 1069;
    public bool IsFast { get; set; } = false;
    public bool HasChildren { get; set; } = false;

    public int Id { get; }

    public ConfigurableClass(int id) { Id = id; }
}

static void Main(string[] args)
{

    IEnumerable<string> configs = SqlConfigLoader.LoadConfig();

    foreach (var str in configs)
    {
        Console.WriteLine("Parsing …
Run Code Online (Sandbox Code Playgroud)

.net c# configuration .net-core system.text.json

6
推荐指数
1
解决办法
6745
查看次数

System.Text.Json 自定义 JsonConverter&lt;DateTime&gt; .Read() 方法未被 .Deserialize() 使用

我遇到了 System.Text.Json 和自定义日期时间格式的问题。

我创建了一个自定义转换器,它在我的 api 项目中工作。当我构建我的客户端时,我尝试使用相同的类,但 .Deserialize() 方法不会在我的类的 DateTime 属性上调用 .Read() 。

任何人都遇到过同样的问题?

public class DateTimeConverter : JsonConverter<DateTime>
{
    private static readonly string _format = "yyyy-MM-dd'T'HH:mm:ss.fff";

    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        return DateTime.ParseExact(reader.GetString(), _format, System.Globalization.CultureInfo.InvariantCulture);
    }

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
    => writer.WriteStringValue(value.ToUniversalTime().ToString(_format));
}

public async Task<StockUnitInfo> GetStockUnitInfoAsync(Inbound inbound, CancellationToken token = default)
{
    var uri = Uri.EscapeUriString($"{_httpClient.BaseAddress}/Readers/{inbound.Position}/StockUnits/{inbound.Barcode}");

    var test = await _httpClient.GetStringAsync(uri);

    var response = await _httpClient.GetStreamAsync(uri);

    var _serializationOptions …
Run Code Online (Sandbox Code Playgroud)

c# json .net-core system.text.json

4
推荐指数
1
解决办法
2470
查看次数

标签 统计

.net-core ×2

c# ×2

system.text.json ×2

.net ×1

configuration ×1

json ×1