带有int

时间:2018-12-12 17:01:31

标签: c# json json.net

我遇到了以下问题,希望您能为我提供帮助:

使用JSON.net在具有很多属性和属性的域模型{/ {1}}上进行/反序列化,并使用ProductModel对属性/属性进行反序列化,以及{ {1}}避免属性重复(用作属性的包装器)。一些属性是通用嵌套JsonProperty(类型为JsonIgnore和其他模型),并且不使用ICollection属性。当应用接收到JSON时,它会正确地反序列化,但是当需要对对象模型进行序列化时,只有int中的JsonIgnore被正确地序列化,就像一个空的JSON数组一样。

ICollection

在这里进行序列化过程。

int

如您所见,我没有使用public class ProductModel : ModelBase { public ProductModel() { Product_stores = new List<int>(); Product_related = new List<int>(); Product_categories = new List<int>(); Product_discounts = new BindingList<ProductDiscountModel>(); } [JsonProperty("model")] private string model; [JsonProperty("location")] private string location; [JsonProperty("quantity")] private int quantity; [JsonProperty("product_category")] public ICollection<int> Product_categories { get; } // Not serilized but deserilized [JsonProperty("product_store")] public ICollection<int> Product_stores { get; } // Noy serilized but deserilized [JsonProperty("product_related")] public ICollection<int> Product_related { get; } // Not serilized but deserilized [JsonProperty("product_discount")] public ICollection<ProductDiscountModel> Product_discounts { get; } // Serilized/Deserilized correctly [JsonProperty("product_id")] public new int ID { get => base.ID; set => base.ID = value; } [JsonIgnore] public string Model { get => model; set { if (model == value) return; model = value; OnPropertyChanged(nameof(model)); } } [JsonIgnore] public string Location { get => location; set { if (location == value) return; location = value; OnPropertyChanged(nameof(location)); } } [JsonIgnore] public int Quantity { get => quantity; set { if (quantity == value) return; quantity = value; OnPropertyChanged(nameof(quantity)); } } }

假设存在一个public string Update(ProductModel model) => JsonConvert.DeserializeObject<ResponseMsg>(repository.UpdateProduct(JsonConvert.SerializeObject(model, Formatting.Indented))).Info; 实例,其中包含提供的数据; 这是一个序列化的JsonSettings.ContractResolver的示例:

ProductModel

1 个答案:

答案 0 :(得分:1)

如果您使用JsonConvert.SerializeObject()并确保整数列表在运行时正确填充了项目,那么它肯定会将ICollection列表序列化为等效的JSON数组。请在Console应用程序中尝试以下代码:

  public ProductModel()
    {
        Product_stores = new List<int>();
        Product_related = new List<int>();
        Product_categories = new List<int>() { 1, 2 , 3 , 4};
    }

 var jsonStr = JsonConvert.SerializeObject(new ProductModel() , Formatting.Indented);
        Console.WriteLine(jsonStr);
        Console.ReadLine();