Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在序列化时自动忽略没有相应构造函数参数的所有属性_C#_.net_Serialization_Json.net_Deserialization - Fatal编程技术网

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

C# 如何在序列化时自动忽略没有相应构造函数参数的所有属性,c#,.net,serialization,json.net,deserialization,C#,.net,Serialization,Json.net,Deserialization,是否有一些非基于属性的方法在序列化时忽略所有没有相应构造函数参数的属性?例如,序列化此类时,应忽略属性Combo。MyClass实例的往返序列化/反序列化不需要序列化Combo。理想情况下,我可以使用一些开箱即用的设置 public class MyClass { public MyClass(int myInt, string myString) { this.MyInt = myInt; this.MyString = myString;

是否有一些非基于属性的方法在序列化时忽略所有没有相应构造函数参数的属性?例如,序列化此类时,应忽略属性
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;
}
您可以通过以下方式执行此操作:

然后像这样使用它:

var settings = new JsonSerializerSettings { ContractResolver = new ConstructorPropertiesOnlyContractResolver(false) };
var json = JsonConvert.SerializeObject(myClass, Formatting.Indented, settings );
如果还希望序列化构造函数参数列表中未包含的读/写属性,例如,
AnUnrelatedWriteProperty
中的

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; }
}

注意,您可能需要。

如果构造函数中的参数名称与属性名称相同,我认为反射可能会帮助您获得应序列化的属性列表。然后你可以用这个简单的方法来创建非基于属性的方法哇,真是个好答案!非常感谢你花时间写这篇文章。
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; }
}