如何在不添加[JsonProperty]属性的情况下序列化JSON.NET中的静态属性

米洛斯

是否可以在不向每个属性添加[JsonProperty]属性的情况下使用JSON.NET序列化静态属性。示例类:

public class Settings
    {
        public static int IntSetting { get; set; }
        public static string StrSetting { get; set; }

        static Settings()
        {
            IntSetting = 5;
            StrSetting = "Test str";
        }
    }

预期结果:

{
  "IntSetting": 5,
  "StrSetting": "Test str"
}

默认行为跳过静态属性:

var x = JsonConvert.SerializeObject(new Settings(), Formatting.Indented);
安德鲁·惠特克

您可以使用自定义合同解析器执行此操作。具体来说,您需要继承DefaultContractResolver并重写该GetSerializableMembers函数:

public class StaticPropertyContractResolver : DefaultContractResolver
{
    protected override List<MemberInfo> GetSerializableMembers(Type objectType)
    {
        var baseMembers = base.GetSerializableMembers(objectType);

        PropertyInfo[] staticMembers = 
            objectType.GetProperties(BindingFlags.Static | BindingFlags.Public);

        baseMembers.AddRange(staticMembers);

        return baseMembers;
    }
}

在这里,我们要做的是调用的基本实现GetSerializableMembers,然后将public static属性添加到要序列化的成员列表中。

要使用它,您可以创建一个新JsonSerializerSettings对象并将设置ContractResolver为的实例StaticPropertyContractResolver

var serializerSettings = new JsonSerializerSettings();

serializerSettings.ContractResolver = new StaticPropertyContractResolver();

现在,将这些设置传递到JsonConvert.SerializeObject,一切都将正常工作:

string json = JsonConvert.SerializeObject(new Settings(), serializerSettings);

输出:

{
  "IntSetting": 5,
  "StrSetting": "Test str"
}

示例: https //dotnetfiddle.net/pswTJW

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不包括属性名称的情况下将匿名对象序列化为JSON

来自分类Dev

在响应中缺少属性名称的情况下反序列化JSON

来自分类Dev

如何在不丢失其特定属性的情况下将子实例反序列化为父对象?

来自分类Dev

如何在不破坏代码风格的情况下使用RestSharp反序列化名为“ value”的属性?

来自分类Dev

如何在不破坏代码风格的情况下使用RestSharp反序列化名为“ value”的属性?

来自分类Dev

Json.Net-如何在没有外部括号的情况下序列化C#列表?

来自分类常见问题

JSON.net:如何在不使用默认构造函数的情况下反序列化?

来自分类Dev

Json.Net-如何在没有外部括号的情况下序列化C#列表?

来自分类Dev

如何在字符串值包装在同名对象中的情况下彻底反序列化JSON

来自分类Dev

如何在字符串值包装在同名对象中的情况下彻底反序列化JSON

来自分类Dev

如何在不初始化或构造对象的情况下从对象获取属性

来自分类Dev

如何在不继承的情况下访问组件的属性

来自分类Dev

JSON.net在不使用模式的情况下反序列化JSON

来自分类Dev

如何使用json.net将额外的属性添加到序列化的JSON字符串中?

来自分类Dev

如何在C#中使用json.net忽略序列化的属性,但保留反序列化

来自分类Dev

Swift中的静态属性

来自分类Dev

Matlab中的静态属性

来自分类Dev

Java中的静态属性

来自分类Dev

Delphi中的静态属性

来自分类Dev

在没有@JsonProperty的情况下更改json中属性的命名

来自分类Dev

在Java中如何在不返回实例或数据副本的情况下获得对属性的访问?

来自分类Dev

形成复合键的持久类属性是否还需要可序列化或在不可序列化的情况下是瞬态的?

来自分类Dev

如何在不丢失TypeScript类的属性的情况下将JSON对象列表转换为TypeScript对象列表?

来自分类Dev

如何使用非标准(和变化的)属性名称反序列化JSON(在.NET中)

来自分类Dev

如何使用非标准(和不同的)属性名称反序列化JSON(在.NET中)

来自分类Dev

如何在不使用 C# 中的序列化的情况下重新打开表单时在按钮上获取选定的组合框项目和文本

来自分类Dev

如何在不立即触发验证的情况下(从控制器)绑定模型属性?

来自分类Dev

如何在不扩展Hybris的情况下重新声明核心模型属性类型

来自分类Dev

如何在不创建冗余类的情况下将XmlElement的属性获取为double?

Related 相关文章

  1. 1

    如何在不包括属性名称的情况下将匿名对象序列化为JSON

  2. 2

    在响应中缺少属性名称的情况下反序列化JSON

  3. 3

    如何在不丢失其特定属性的情况下将子实例反序列化为父对象?

  4. 4

    如何在不破坏代码风格的情况下使用RestSharp反序列化名为“ value”的属性?

  5. 5

    如何在不破坏代码风格的情况下使用RestSharp反序列化名为“ value”的属性?

  6. 6

    Json.Net-如何在没有外部括号的情况下序列化C#列表?

  7. 7

    JSON.net:如何在不使用默认构造函数的情况下反序列化?

  8. 8

    Json.Net-如何在没有外部括号的情况下序列化C#列表?

  9. 9

    如何在字符串值包装在同名对象中的情况下彻底反序列化JSON

  10. 10

    如何在字符串值包装在同名对象中的情况下彻底反序列化JSON

  11. 11

    如何在不初始化或构造对象的情况下从对象获取属性

  12. 12

    如何在不继承的情况下访问组件的属性

  13. 13

    JSON.net在不使用模式的情况下反序列化JSON

  14. 14

    如何使用json.net将额外的属性添加到序列化的JSON字符串中?

  15. 15

    如何在C#中使用json.net忽略序列化的属性,但保留反序列化

  16. 16

    Swift中的静态属性

  17. 17

    Matlab中的静态属性

  18. 18

    Java中的静态属性

  19. 19

    Delphi中的静态属性

  20. 20

    在没有@JsonProperty的情况下更改json中属性的命名

  21. 21

    在Java中如何在不返回实例或数据副本的情况下获得对属性的访问?

  22. 22

    形成复合键的持久类属性是否还需要可序列化或在不可序列化的情况下是瞬态的?

  23. 23

    如何在不丢失TypeScript类的属性的情况下将JSON对象列表转换为TypeScript对象列表?

  24. 24

    如何使用非标准(和变化的)属性名称反序列化JSON(在.NET中)

  25. 25

    如何使用非标准(和不同的)属性名称反序列化JSON(在.NET中)

  26. 26

    如何在不使用 C# 中的序列化的情况下重新打开表单时在按钮上获取选定的组合框项目和文本

  27. 27

    如何在不立即触发验证的情况下(从控制器)绑定模型属性?

  28. 28

    如何在不扩展Hybris的情况下重新声明核心模型属性类型

  29. 29

    如何在不创建冗余类的情况下将XmlElement的属性获取为double?

热门标签

归档