当前位置: 首页 > 知识库问答 >
问题:

在JSON.NET中序列化/反序列化不嵌套的嵌套POCO属性

邵宏达
2023-03-14

考虑:

 public class Foo
 {
    public string FooName { get; set; } = "FooName";
    public Bar Bar { get; set; } = new Bar();
 }

public class Bar
{
    public string BarName { get; set; } = "BarName";
}

如果我们序列化Foo(),输出是:

{"FooName":"FooName","Bar":{"BarName":"BarName"}}

我想要:

{"FooName":"FooName", "BarName":"BarName" }

最干净的方法是什么?

共有1个答案

邢飞雨
2023-03-14

您可以使用自定义转换器来完成此操作,例如,这是一个快速而肮脏的示例:

public class BarConverter : JsonConverter
{
    public override bool CanConvert(Type objectType) => typeof(Bar) == objectType;

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, 
        JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(((Bar)value).BarName);
        value.Dump();
    }
}

然后这样装饰你的模型:

public class Foo
{
    public string FooName { get; set; } = "FooName";

    [JsonConverter(typeof(BarConverter))]
    public Bar Bar { get; set; } = new Bar();
}
 类似资料:
  • 问题内容: 将对象反序列化为()时,嵌套对象反序列化为s。是否可以强制将嵌套对象反序列化为s? 问题答案: 我找到了一种通过提供实现将所有嵌套对象转换为的方法: 文档: Json.NET的CustomCreationConverter

  • 我知道我可以创建一个单独的Report类,然后使用@JSONProperty将其嵌入到ReportResponse中。有没有一种方法可以避免这种情况,并用一个注释标记ReportResponse类,将它映射到JSON中的“Report”元素?

  • 我正在创建一个具有嵌套列表的API。Jackson似乎是一个创建对象的好工具,但我不太清楚如何嵌套列表,我想知道这是否可能。 我的对象看起来像这样。 我希望有一种方法可以将其映射到json,看起来像: 我们希望能够做到这一点,以便我们可以将属性添加到列表中。

  • 问题内容: 在我当前的项目中,我在android中使用GSON库,并且遇到了嵌套地图反序列化的问题。这就是初始json的样子 而我的pojo的 和花类 但是当我尝试反序列化此对象时,我可以访问嵌套的哈希图,示例代码为 有什么建议? 问题答案: 这告诉Gson您想反序列化为未知值类型的Map。您可能会想指定类似的东西,但是您无法在Java中进行指定,因此解决方案是使用他们在Gson中称为TypeTo

  • 问题内容: 我如何才能序列化一个特定的属性,但又防止其反序列化回POCO?是否可以使用属性装饰特定属性? 基本上,我正在寻找一个与ShouldSerialize *方法等效的反序列化方法。 我知道我可以编写一个自定义转换器,但是这样做似乎有点过头了。 编辑: 这里还有一些背景。这背后的原因是我的课看起来像: 我需要请求的属性,但是我不希望它反序列化并触发设置程序逻辑。 问题答案: 最简单的方法是将

  • 我有以下xml 我需要将其反序列化为以下POJO: 这里的问题是被包装在元素中