【问题标题】:How to only serialize a special property's value to json如何仅将特殊属性的值序列化为 json
【发布时间】:2021-08-09 12:29:18
【问题描述】:

YamlDotNet 可以反序列化包含 json 的 yaml 文档。

假设有一个 yaml 文档作为 输入,如下所示。

fieldA: a
fieldB:
  - { "subFieldA": "a1","subFieldB": "b1" }
  - { "subFieldA": "a2","subFieldB": "b2" }

然后,我反序列化它并重新序列化。

class Program
{
    static void Main(string[] args)
    {
        using var sr = new StreamReader("test.yaml");
        var deserializer = new DeserializerBuilder()
            .WithNamingConvention(CamelCaseNamingConvention.Instance)
            .Build();
        var output = deserializer.Deserialize<Temp>(sr);
        var serializer = new SerializerBuilder()
            .Build();
        Console.WriteLine(serializer.Serialize(output));
    }
}

public class Temp
{
    public string FieldA { get; set; }
    public List<Dictionary<string, string>> FieldB { get; set; }
}

我会得到如下的输出

FieldA: a
FieldB:
  - subFieldA: a1
    subFieldB: b1
  - subFieldA: a2
    subFieldB: b2

但我希望属性FieldB 仍被序列化为 json。 换句话说,我想获得与 input 相同的 output

请问有没有办法使用YamlDotNet来实现这个效果?

【问题讨论】:

  • 所以,你发明了 json 和 yaml 的混合,现在你问“这个工具支持吗?”。我看不出你是怎么想到的。
  • @Zalasento 你能说得更具体点吗?我可以为您制作样品。

标签: c# yamldotnet


【解决方案1】:

YamlDotNet 仅用于序列化和反序列化 YAML。如果您只想序列化该字典,请使用 .NET 序列化库。显然,字符串属性不能做任何事情,除非它是字典的一部分。

using System.Text.Json;

var temp = new Temp();
temp.Dict = new Dictionary<string, string>();
temp.Dict.Add("hello", "world");

string json = JsonSerializer.Serialize(temp.Dict);

如果您问是否可以将 JSON 放入 YAML,当然,只需先将其转换为 json 字符串,然后将该字符串添加为单独类的属性以序列化为 YAML。我不相信有一种方法可以自动让 YAML 库将其部分内容序列化为 JSON。你不能混搭。

【讨论】:

    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 2019-03-21
    • 2013-06-12
    • 1970-01-01
    • 2023-02-07
    • 2021-12-01
    • 1970-01-01
    相关资源
    最近更新 更多