如何将c#类属性转换为Json文件
本文关键字:转换 Json 文件 属性 | 更新日期: 2023-09-27 18:12:14
我试图通过使用c#类及其包含值的属性来创建jsonObject和json数组。请参阅下面的完整代码。
public class Product
{
public Int32 Id { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
public String Address { get; set; }
}
protected void Button1_Click(object sender, EventArgs e)
{
Product pr = new Product();
pr.Id = 10;
pr.FirstName = "John";
pr.LastName = "ab";
pr.Address = "My Add1";
string json = JsonConvert.SerializeObject(pr,Formatting.Indented);
System.IO.File.WriteAllText(@"d:'abcjson.json", json);
}
上面的代码给出如下输出
{
"Id": 10,
"FirstName": "John",
"LastName": "ab",
"Address": My Add1,
}
但是我需要以下输出,然后是jsonObject和jsonArray。请任何指南,我怎么能得到下面的输出使用上面的json代码按钮点击。提前谢谢。
{
"Product":[
{
"Id": 10,
"FirstName ":"John",
"lastName":"ab",
"Address":My add1
}
]
}
要做的是查看您想要的JSON。它是一个对象,具有Product
属性,它是一个产品对象数组。
最简单的方法就是创建一个类模型
public class JsonRoot
{
[JsonProperty("Product")]
public List<Product> Products { get; set; }
}
那么你可以直接使用:
var root = new JsonRoot { Products = new List<Product> { pr } };
string json = JsonConvert.SerializeObject(root, Formatting.Indented);
您可以使用匿名类型代替,可能:
var root = new { Product = new[] { pr } };
我个人不倾向于喜欢将匿名类型与命名类型混合在一起进行序列化,但它应该可以正常工作…
protected void Button1_Click(object sender, EventArgs e)
{
var pr = new
{
Product = new[]
{
new Product
{
Id = 10,
FirstName = "John",
LastName = "ab",
Address = "My Add1"
}
}
};
string json = JsonConvert.SerializeObject(pr,Formatting.Indented);
System.IO.File.WriteAllText(@"d:'abcjson.json", json);
}
简单的解决方案是将对象放入集合中,就像@JonSkeet建议的那样。
如果你认为,这是解决方案需要创建不可用的东西,如List<Product>
和单独的json包装类,你可以使用匿名类型数组,如@MarkShevchenko建议,或在JsonWriter
类上做一些工作:
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter writer = new JsonTextWriter(sw))
{
writer.Formatting = Formatting.Indented;
writer.WriteStartObject(); // {
writer.WritePropertyName("Product"); // "Product:"
writer.WriteStartArray(); // [
writer.WriteRaw(JsonConvert.SerializeObject(pr)); // your object
writer.WriteEnd(); // ]
writer.WriteEndObject(); //}
}
var result = sb.ToString();
将结果字符串存储在result
中,而不创建匿名数组和单独的类。