我不确定我是否这样做正确。我将json存储在要更新的数据库中。
var items = dbContext.items.FromSql("select *, JSON_VALUE(Attributes, '$.serialNumber') as serialNumber FROM Items WHERE JSON_VALUE(Attributes,'$.serialNumber') like '%15830792087%'").ToList();
var attributes = JObject.Parse(items[0].Attributes);
var images = attributes["image"];
if(images == null){
var newImage = new List<InventoryImage>()
{
new InventoryImage()
{
ImageUrl = imageBlob.Uri.AbsoluteUri,
OrignalName = file.FileName,
ThumbnailUrl = thumbnailBlob.Uri.AbsoluteUri
}
};
JProperty newProp = new JProperty("image", JsonConvert.SerializeObject(newImage));
attributes.Add(newProp);
images[0].Attributes = JsonConvert.SerializeObject(attributes);
dbContext.SaveChanges();
}
我进入数据库的内容。
"image":"[{\"OrignalName\":\"cat-pet-animal-domestic-104827.jpeg\",\"ImageUrl\":\"ed1ab040e710.jpeg\",\"ThumbnailUrl\":\"3c3e73e3-5062-492b-b830-ed1ab040e710_thumbnail.jpeg\"}]"}
答案 0 :(得分:1)
JProperty newProp = new JProperty("image", JsonConvert.SerializeObject(newImage));
这会将newImage
序列化为JSON字符串,然后将该JSON字符串作为值分配给image
属性。因此property
的值是一个字符串,恰好是JSON字符串。
您应该做的是直接分配值,而无需先对其进行序列化。这样就避免了双重序列化:
Property newProp = new JProperty("image", JToken.FromObject(newImage));