C# Json.NET don';t序列化特定属性

C# Json.NET don';t序列化特定属性,c#,json,json.net,C#,Json,Json.net,我有下一个问题: "mode":"modeValue", "format":"formatValue", "options":{ "page":1, "size":"70", "resize":"false", "templating":null } 但“选项”值对象可以不同于当前,我可以有许多不同的选项。例如,它可以是 "options": { "page": 2, "first": "true", "parent": null }

我有下一个问题:

"mode":"modeValue",
"format":"formatValue",
"options":{
    "page":1,
    "size":"70",
    "resize":"false",
    "templating":null
}
但“选项”值对象可以不同于当前,我可以有许多不同的选项。例如,它可以是

"options": {
    "page": 2,
    "first": "true",
    "parent": null
}
我创建了一个类

public class Settings
{
    [JsonProperty(PropertyName = "mode")]
    public string Mode { get; set; }

    [JsonProperty(PropertyName = "format")]
    public string OutputFormat { get; set; }

    [JsonProperty(PropertyName = "options")]
    public string Options { get; set; }
}
我不想反序列化“options”值,而是在
options
属性中将其设置为字符串(序列化)

注意:我将仅将此类用于反序列化


谢谢大家!

您可以通过使用
OnDeserialized
属性来实现这一点。下面是一个例子:

public class Settings
    {
        [JsonProperty(PropertyName = "mode")]
        public string Mode { get; set; }

        [JsonProperty(PropertyName = "format")]
        public string OutputFormat { get; set; }

        [JsonIgnoreAttribute]
        public string Options { get; private set; }

        [JsonProperty(PropertyName = "options")]
        private object Temp { get; set; }

        [OnDeserialized]
        private void OnDeserialized(StreamingContext ctx)
        {
            Options = Temp?.ToString();
        }
    }

“选项”反序列化为“Temp”属性,然后“选项”由
Temp.ToString()

填充。您可以使用
OnDeserialized
属性来实现这一点。下面是一个例子:

public class Settings
    {
        [JsonProperty(PropertyName = "mode")]
        public string Mode { get; set; }

        [JsonProperty(PropertyName = "format")]
        public string OutputFormat { get; set; }

        [JsonIgnoreAttribute]
        public string Options { get; private set; }

        [JsonProperty(PropertyName = "options")]
        private object Temp { get; set; }

        [OnDeserialized]
        private void OnDeserialized(StreamingContext ctx)
        {
            Options = Temp?.ToString();
        }
    }

“选项”反序列化为“Temp”属性,然后“选项”由
Temp.ToString()填充

谢谢!这是我的工作,所以我会将其标记为“解决方案”。你能告诉我
Options=Temp?.ToString()中
Temp
之后的
是什么吗?Temp?.ToString()是写入Temp!=无效的temp.ToString():null@Pepo-Viezevingertjes是对的。为了安全起见,我添加了这个选项(如果“options”在json中为null或未定义),谢谢!这是我的工作,所以我会将其标记为“解决方案”。你能告诉我
Options=Temp?.ToString()中
Temp
之后的
是什么吗?Temp?.ToString()是写入Temp!=无效的temp.ToString():null@Pepo-Viezevingertjes是对的。为了安全起见,我添加了这个选项(以防“options”在json中为null或未定义)