我遇到了以下问题,希望您能为我提供帮助:
使用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
答案 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();