如何在c#中使用json.net创建json格式

时间:2014-01-06 07:28:34

标签: c# json json.net

我需要一个如下的最终json格式,它应该是动态的。

{
      "product_items" : 
      [
        { 
          "_at" : 1,                  
          "product_id" : "999"
        },     
        {
          "_at" : 2,
          "quantity" : 2.00
        },
        {
          "_delete_at" : 3       
        }
      ]
    }

如何在code._at字段中创建如上所示的json格式是dynamic.sometimes它可能是2,有时它可能是10.我不知道在c#中动态生成json。

class Test
    {
        public ProductItem[] product_items { get; set; }


        class ProductItem
        {
            public int[] _at { get; set; }
            public int[] _delete { get; set; }
            public int[] quantity { get; set; }
            public string[] product_id{get;set;}
        }
    }

我已经为上面的json创建了属性。

2 个答案:

答案 0 :(得分:1)

我正在使用Newtonsoft library

你的课看起来应该更像这样:

public class ProductItem
{
    public int _at { get; set; }
    public string product_id { get; set; }
    public double? quantity { get; set; }
    public int? _delete_at { get; set; }
}

public class ProductItemObject
{
    public List<ProductItem> product_items { get; set; }
}

序列化的一个例子:

List<ProductItem> list = new List<ProductItem>();   
ProductItemObject o = new ProductItemObject { product_items = list };

var item1 = new ProductItem { _at = 1, product_id = "001" };
var item2 = new ProductItem { _at = 2, quantity = 2.00 };
var item3 = new ProductItem { _delete_at = 3 };

list.Add(item1);
list.Add(item2);
list.Add(item3);


string json = JsonConvert.SerializeObject(o, Formatting.Indented);

// json string :
//            {
//  "product_items": [
//    {
//      "_at": 1,
//      "product_id": "001",
//      "quantity": null,
//      "_delete_at": null
//    },
//    {
//      "_at": 2,
//      "product_id": null,
//      "quantity": 2.0,
//      "_delete_at": null
//    },
//    {
//      "_at": 0,
//      "product_id": null,
//      "quantity": null,
//      "_delete_at": 3
//    }
//  ]
//}

一个替代的完整动态,它可以在没有任何模型的情况下获得相同的Json字符串:

var jsonObject = new JObject();
dynamic objectList = jsonObject;

objectList.product_items = new JArray() as dynamic;

dynamic item = new JObject();
item._at = 1;
item.product_id = "999";
objectList.product_items.Add(item);

item = new JObject();
item._at = 2;
item.quantity = 2.00;
objectList.product_items.Add(item);

item = new JObject();
item._delete_at = 3;
objectList.product_items.Add(item);

string json = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObject, Formatting.Indented);

答案 1 :(得分:0)

好吧,如果我理解你并且你只需要能够生成json,那么产品列表应该是动态的,可能是匿名类:

public class Products
{
   public Products()
   {
       product_items = new List<dynamic>();
   }
   public List<dynamic> product_items { get; set; }
}

products.product_items.Add(new { _at = 1, product_id = "999" });