相关疑难解决方法(0)

为什么在使用JSON.NET反序列化时会忽略我的默认值?

我正在使用JSON.NET作为我的主序列化程序.

这是我的模型,看起来我已经设置了一些JSONProperties和一个DefaultValue.

public class AssignmentContentItem
{
    [JsonProperty("Id")]
    public string Id { get; set; }
    [JsonProperty("Qty")]
    [DefaultValue(1)]
    public int Quantity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我序列化时List<AssignmentContentItem>,它做得很好:

private static JsonSerializerSettings s = new JsonSerializerSettings
{
    DefaultValueHandling = DefaultValueHandling.Ignore,
    NullValueHandling = NullValueHandling.Ignore
};
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

[{"Id":"Q0"},{"Id":"Q4"},{"Id":"Q7"}]
Run Code Online (Sandbox Code Playgroud)

但是当我想反序列化这个jsonContent时,属性Qty始终为0并且未设置为默认值.我的意思是,当我反序列化jsonContent时,因为Quantity的DefaultValue应该是1而不是0.

public static List<AssignmentContentItem> DeserializeAssignmentContent(string jsonContent)
{
    return JsonConvert.DeserializeObject<List<AssignmentContentItem>>(jsonContent, s);
}
Run Code Online (Sandbox Code Playgroud)

我该怎么办

c# serialization default-value json.net deserialization

15
推荐指数
2
解决办法
1万
查看次数

JSON.net,C#,无法在数据模型中设置默认值

我正在使用JsonConvert.DeserializeObject(json.ToString()); 反序列化JSON并在相关模型中填充我的字段。直到JSON中缺少数据为止,此方法都有效。基本上没有“ key:value”,而只有“ key:null”。

我对JsonConverter的理解是,它将创建一个对象,在该对象中,我应该能够通过构造函数(由于种种原因而不会被我调用)或通过此处提到的标记来使用默认值填充字段:JSON.net或此处缺少属性的默认值为什么当我用JSON.NET反序列化时会忽略我的默认值?

我尝试了这两种方法,但都没有初始化相关字段的结果。当然,如果JSON中没有数据,则无法将任何数据反序列化到相关模型。但是我希望我仍然可以使用默认值来初始化一些值,然后这些值将被JsonConverter忽略(不会被覆盖)(就像现在发生的一样)。但是,这似乎不可能吗?

先前尝试的源代码

模型类

namespace Project.MyJob
{
    public class JsonModel
    {
        public JsonModel()
        {
            Type_X type_x = new Type_X();
            // This is not doing anything. I would have expected that the 
            // class' constructor would be called but, no.
        }
        public string objectNumber { get; set; }
        public string objectFamily { get; set; }
        public string objectOrder { get; set; }
        public string location { get; set; }
        public string place …
Run Code Online (Sandbox Code Playgroud)

c# json.net

3
推荐指数
1
解决办法
1523
查看次数