为什么我得到转义报价? Json.net

时间:2018-10-01 21:41:43

标签: json asp.net-core json.net ef-core-2.1

我不确定我是否这样做正确。我将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\"}]"}

1 个答案:

答案 0 :(得分:1)

JProperty newProp = new JProperty("image", JsonConvert.SerializeObject(newImage));

这会将newImage序列化为JSON字符串,然后将该JSON字符串作为值分配给image属性。因此property的值是一个字符串,恰好是JSON字符串。

您应该做的是直接分配值,而无需先对其进行序列化。这样就避免了双重序列化:

Property newProp = new JProperty("image", JToken.FromObject(newImage));