我有这个JSON:
{
"ID":123,
"Products":null,
"Title":"Products"
}
我想将一些数据从DB添加到“Products”节点,所以我的最终json将如下所示:
{
"ID":123,
"Products":[
{
"ID":1,
"Name":"AA"
},
{
"ID":2,
"Name":"BB"
}
],
"Title":"Products"
}
我正在使用此代码:
internal class Product
{
public int ID { get; set; }
public string Name { get; set; }
}
//simulate DB
var products= new List<Product>()
{
new Product() {ID=1,Name="AA" },
new Product() {ID=2,Name="BB" }
};
string JSONstr = FilesUtils.OpenFile(Path.Combine(Environment.CurrentDirectory, "Sample.json"));
JObject JSON = JObject.Parse(JSONstr);
((JValue)JSON["Products"]).Value = JObject.FromObject(products);
但我得到一个例外:
对象序列化为Array。期望JObject实例。
答案 0 :(得分:1)
你可以这样做:
JSON["Products"] = JToken.FromObject(products);
要添加新属性,请执行相同的操作,例如:
JSON["TimeStamp"] = JToken.FromObject(DateTime.UtcNow);
注意:
JObject
的{{3}}将使用指定的名称"Products"
添加或替换该属性。
item setter将任何.Net对象序列化为JToken.FromObject()
层次结构。 LINQ to JSON是此层次结构的抽象基类,因此可以表示数组,对象和基元。有关详细信息,请参阅JToken
。
示例here。
答案 1 :(得分:0)
预期的对象必须是(根据您的JSON)。如果那是您想要的JSON,您可以考虑将其包装起来并添加ID和JSON中显示的标题。
public class Product
{
public int ID { get; set; }
public string Name { get; set; }
}
public class YourObject
{
public int ID { get; set; }
public List<Product> Products { get; set; }
public string Title { get; set; }
}