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

时间:2016-10-10 06:22:44

标签: c# json

我试图通过使用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
  }
]
}

3 个答案:

答案 0 :(得分:12)

要做的是看看你想要的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 } };

我个人不喜欢喜欢将匿名类型与命名类型混合进行序列化,但它应该可以正常工作......

答案 1 :(得分:4)

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);
}

答案 2 :(得分:1)

简单的解决方案是将您的对象放入集合中,如@JonSkeet建议的那样。

如果您认为,这是解决方案需要创建不可用的东西,例如List<Product>和单独的json包装类,您可以使用匿名类型数组,如@MarkShevchenko建议的那样,或者在{{3}上做一些工作} class以下列方式:

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中,而不会创建匿名数组和单独的类。