如何将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
  }
]
}

如何将c#类属性转换为Json文件

要做的是查看您想要的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中,而不创建匿名数组和单独的类。