序列化时如何自动忽略所有属性而没有相应的构造函数参数

SFun28

有一些非基于属性的方法在序列化时忽略所有没有相应构造函数参数的属性吗?例如,在序列化此类时,Combo应忽略属性实例的往返序列化/反序列化MyClass不需要Combo序列化。理想情况下,我可以使用一些现成的设置。

public class MyClass
{
    public MyClass(int myInt, string myString)
    {
        this.MyInt = myInt;
        this.MyString = myString;
    }

    public int MyInt { get; }

    public string MyString { get; }

    public string Combo => this.MyInt + this.MyString;
}
数据库

您可以使用自定义IContractResolver方式进行此操作

public class ConstructorPropertiesOnlyContractResolver : DefaultContractResolver
{
    readonly bool serializeAllWritableProperties;

    public ConstructorPropertiesOnlyContractResolver(bool serializeAllWritableProperties)
        : base()
    {
        this.serializeAllWritableProperties = serializeAllWritableProperties;
    }

    protected override JsonObjectContract CreateObjectContract(Type objectType)
    {
        var contract = base.CreateObjectContract(objectType);

        if (contract.CreatorParameters.Count > 0)
        {
            foreach (var property in contract.Properties)
            {
                if (contract.CreatorParameters.GetClosestMatchProperty(property.PropertyName) == null)
                {
                    if (!serializeAllWritableProperties || !property.Writable)
                        property.Readable = false;
                }
            }
        }

        return contract;
    }
}

然后像这样使用它:

var settings = new JsonSerializerSettings { ContractResolver = new ConstructorPropertiesOnlyContractResolver(false) };
var json = JsonConvert.SerializeObject(myClass, Formatting.Indented, settings );

通过trueserializeAllWritableProperties,如果你也想不包含在构造函数中的参数列表,如序列化的读/写性能AnUnrelatedReadWriteProperty在:

public class MyClass
{
    public MyClass(int myInt, string myString)
    {
        this.MyInt = myInt;
        this.MyString = myString;
    }

    public int MyInt { get; private set; }

    public string MyString { get; private set; }

    public string Combo { get { return this.MyInt + this.MyString; } }

    public string AnUnrelatedReadWriteProperty { get; set; }
}

请注意,您可能需要缓存合同解析器以获得最佳性能

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

没有反序列化的相应值时,如何使用构造函数的默认参数值?

来自分类Dev

在JsonCovertor反序列化时自动选择参数化的构造函数

来自分类Dev

如何从价值数反序列化INT(错误 - 没有INT /诠释参数的构造函数/工厂方法从数字值反序列化)

来自分类Dev

Service.datalist无法序列化,因为它没有无参数的构造函数

来自分类Dev

在没有无参数构造函数的情况下序列化ISerializable类

来自分类Dev

无法序列化对象,因为它没有无参数的构造函数

来自分类Dev

反序列化没有默认构造函数的 JSON

来自分类Dev

使用Jackson进行反序列化时有选择地忽略JSON属性

来自分类Dev

当对共享数据的所有引用都进行序列化时,为什么函数是线程安全的?

来自分类Dev

当对共享数据的所有引用都进行序列化时,为什么函数是线程安全的?

来自分类常见问题

没有要从字符串值('')反序列化的字符串参数构造函数/工厂方法

来自分类Dev

为什么没有无参数构造函数的对象也不能序列化,即使它实现了Serializable?

来自分类Dev

修复了反序列化期间没有为“ System.String []”类型定义的无参数构造函数的问题

来自分类Dev

有没有一种方法可以在序列化时自动初始化空子对象?

来自分类Dev

如何使用Json.reads将JSON反序列化为带有可选构造函数参数的case类

来自分类Dev

反序列化时缺少JSON.Net构造函数参数

来自分类Dev

反序列化JSON子级时出现“没有合适的构造函数”错误

来自分类Dev

如果父级没有no-arg构造函数,则出现序列化问题

来自分类Dev

为什么反序列化过程中没有调用默认构造函数?

来自分类Dev

从MongoDb + C#中反序列化没有默认构造函数的对象

来自分类Dev

有没有一种方法可以自动生成或至少缩短(例如__all__之类的参数)序列化函数?

来自分类Dev

如何检查没有参数的类的构造函数

来自分类Dev

如何迫使Newtonsoft Json序列化所有属性?(具有“指定”属性的奇怪行为)

来自分类Dev

为什么我的客户端收到“ System.Uri无法序列化,因为它没有无参数的构造函数。”?

来自分类Dev

在某些条件下进行序列化时忽略属性

来自分类Dev

从aspnetmvc序列化时,忽略敲除视图模型的属性

来自分类Dev

如何仅序列化传递给构造函数的属性?

来自分类Dev

有条件地忽略属性序列化

来自分类Dev

如何在一个特定的序列化中序列化除特定属性以外的所有属性

Related 相关文章

  1. 1

    没有反序列化的相应值时,如何使用构造函数的默认参数值?

  2. 2

    在JsonCovertor反序列化时自动选择参数化的构造函数

  3. 3

    如何从价值数反序列化INT(错误 - 没有INT /诠释参数的构造函数/工厂方法从数字值反序列化)

  4. 4

    Service.datalist无法序列化,因为它没有无参数的构造函数

  5. 5

    在没有无参数构造函数的情况下序列化ISerializable类

  6. 6

    无法序列化对象,因为它没有无参数的构造函数

  7. 7

    反序列化没有默认构造函数的 JSON

  8. 8

    使用Jackson进行反序列化时有选择地忽略JSON属性

  9. 9

    当对共享数据的所有引用都进行序列化时,为什么函数是线程安全的?

  10. 10

    当对共享数据的所有引用都进行序列化时,为什么函数是线程安全的?

  11. 11

    没有要从字符串值('')反序列化的字符串参数构造函数/工厂方法

  12. 12

    为什么没有无参数构造函数的对象也不能序列化,即使它实现了Serializable?

  13. 13

    修复了反序列化期间没有为“ System.String []”类型定义的无参数构造函数的问题

  14. 14

    有没有一种方法可以在序列化时自动初始化空子对象?

  15. 15

    如何使用Json.reads将JSON反序列化为带有可选构造函数参数的case类

  16. 16

    反序列化时缺少JSON.Net构造函数参数

  17. 17

    反序列化JSON子级时出现“没有合适的构造函数”错误

  18. 18

    如果父级没有no-arg构造函数,则出现序列化问题

  19. 19

    为什么反序列化过程中没有调用默认构造函数?

  20. 20

    从MongoDb + C#中反序列化没有默认构造函数的对象

  21. 21

    有没有一种方法可以自动生成或至少缩短(例如__all__之类的参数)序列化函数?

  22. 22

    如何检查没有参数的类的构造函数

  23. 23

    如何迫使Newtonsoft Json序列化所有属性?(具有“指定”属性的奇怪行为)

  24. 24

    为什么我的客户端收到“ System.Uri无法序列化,因为它没有无参数的构造函数。”?

  25. 25

    在某些条件下进行序列化时忽略属性

  26. 26

    从aspnetmvc序列化时,忽略敲除视图模型的属性

  27. 27

    如何仅序列化传递给构造函数的属性?

  28. 28

    有条件地忽略属性序列化

  29. 29

    如何在一个特定的序列化中序列化除特定属性以外的所有属性

热门标签

归档