Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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# JsonConvert.NET序列化/反序列化只读_C#_Json.net - Fatal编程技术网

C# JsonConvert.NET序列化/反序列化只读

C# JsonConvert.NET序列化/反序列化只读,c#,json.net,C#,Json.net,目前我正在使用RESTAPI,我无法控制它,并且已经构建了与我从Api收到的json相对应的模型 不过,讨论中的Api不允许我在发布文章时将整个模型向后推,因此我需要找到一种方法来完全反序列化json,但在序列化时只写入选定的数据 到目前为止,我已经尝试过JsonIgnore,它按照tin上所说的做,完全忽略了属性 然后,我创建了一个自定义属性JsonWriteAttribute,并将其应用于要序列化的属性 我已经研究过重写DefaultContractResolver CreateProper

目前我正在使用RESTAPI,我无法控制它,并且已经构建了与我从Api收到的json相对应的模型

不过,讨论中的Api不允许我在发布文章时将整个模型向后推,因此我需要找到一种方法来完全反序列化json,但在序列化时只写入选定的数据

到目前为止,我已经尝试过JsonIgnore,它按照tin上所说的做,完全忽略了属性

然后,我创建了一个自定义属性JsonWriteAttribute,并将其应用于要序列化的属性

我已经研究过重写DefaultContractResolver CreateProperties方法,然后只获取具有该属性的属性,但我似乎无法从该方法或解析程序中的属性确定我是在执行读取还是写入操作

我也试过看一个定制的JsonConverter,但似乎我不能中断管道,然后必须自己处理所有的写操作。我是不是遗漏了什么,因为这似乎是正确的想法

在使用Json.Net进行序列化、反序列化时,有人想出了一种将属性标记为只读的方法吗


谢谢

对属性进行条件序列化的一种可能性是
ShouldSerialize

创建一个方法,该方法返回一个bool,以确定是否应该序列化属性。该方法以ShouldSerialize开头,以属性名结尾。e、 g.
ShouldSerializeMyProperty

一个例子

public MyClass
{   
    public string MyProp { get; set; }
    public string ExcludeThisProp { get; set; }
    public int MyNumber { get; set; }
    public int ExcludeIfMeetsCondition { get; set; }

    //Define should serialize options       
    public bool ShouldSerializeExcludeMyProp() { return (false); } //Will always exclude
    public bool ShouldSerializeExcludeIfMeetsCondition() 
    { 
        if (ExcludeIfMeetsCondition > 10)
            return true;
        else if (DateTime.Now.DayOfWeek == DayOfWeek.Monday)
            return true;
        else
            return false; 
    } 
}

有条件序列化属性的一种可能性是
ShouldSerialize

创建一个方法,该方法返回一个bool,以确定是否应该序列化属性。该方法以ShouldSerialize开头,以属性名结尾。e、 g.
ShouldSerializeMyProperty

一个例子

public MyClass
{   
    public string MyProp { get; set; }
    public string ExcludeThisProp { get; set; }
    public int MyNumber { get; set; }
    public int ExcludeIfMeetsCondition { get; set; }

    //Define should serialize options       
    public bool ShouldSerializeExcludeMyProp() { return (false); } //Will always exclude
    public bool ShouldSerializeExcludeIfMeetsCondition() 
    { 
        if (ExcludeIfMeetsCondition > 10)
            return true;
        else if (DateTime.Now.DayOfWeek == DayOfWeek.Monday)
            return true;
        else
            return false; 
    } 
}

能否使用两个类,一个继承自另一个,然后序列化到父类并反序列化到子类?我最近做了一些相当类似的事情,并使用了自定义JsonConverter选项。我所做的是向属性添加一个自定义属性,在自定义JsonConverter中使用反射来获取所有属性,并根据属性更改序列化逻辑。你可以使用两个类,一个继承自另一个,然后序列化到父类,反序列化到子类吗?我最近做了一些相当类似的事情,并使用了自定义JsonConverter选项。我所做的是向属性添加一个自定义属性,在自定义JsonConverter中使用反射来获取所有属性,并根据属性更改序列化逻辑。想一想这些东西应该对你有用。