2012-04-20 78 views
10

Tôi cần phải tạo một đối tượng Json động bằng cách lặp qua các cột. để khai báo một đối tượng json trống sau đó thêm các yếu tố để nó tự động để cuối cùng xuất hiện như:Tạo Json động trong C#

Đối tượng json thức nên như thế này:

List<String> columns=new List<String>{"FirstName","LastName"}; 

    var jsonObj= new {}; 

    for(Int32 i=0;i<columns.Count();i++) 
    jsonObj[col[i]]="Json" + i; 

jsonObj={FirstName="Json0", LastName="Json1"}; 

Trả lời

19
[TestFixture] 
public class DynamicJson 
{ 
    [Test] 
    public void Test() 
    { 
     dynamic flexible = new ExpandoObject(); 
     flexible.Int = 3; 
     flexible.String = "hi"; 

     var dictionary = (IDictionary<string, object>)flexible; 
     dictionary.Add("Bool", false); 

     var serialized = JsonConvert.SerializeObject(dictionary); // {"Int":3,"String":"hi","Bool":false} 
    } 
} 
+0

Yape đó là những gì tôi đang tìm kiếm, cảm ơn.Tôi sẽ thử nó và lấy lại với bạn –

+0

Có thể nhận được một cái gì đó như: {"Trường học": [{"tên": "kiểm tra"}, {"tên": "thử nghiệm"}]} với phương pháp ExpandoObject không? tên mảng, các trường trong ví dụ này, phải là một biến. –

+0

@ThomasTeilmann xem xét đặt câu hỏi mới với chi tiết hơn. Tôi không chắc chắn những gì bạn đang sau khi dựa trên bình luận của bạn. –

11

Bạn nên sử dụng JavaScriptSerializer. Điều đó có thể sắp đặt các loại thực tế cho bạn vào JSON :)

tham khảo: http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

EDIT: Một cái gì đó như thế này?

var columns = new Dictionary<string, string> 
      { 
       { "FirstName", "Mathew"}, 
       { "Surname", "Thompson"}, 
       { "Gender", "Male"}, 
       { "SerializeMe", "GoOnThen"} 
      }; 

var jsSerializer = new JavaScriptSerializer(); 

var serialized = jsSerializer.Serialize(columns); 

Output:

{"FirstName":"Mathew","Surname":"Thompson","Gender":"Male","SerializeMe":"GoOnThen"} 
+0

Tại sao lại sử dụng điều đó trên json.net? – Oded

+0

Tôi không biết json.net, bạn có liên kết không? Tôi đã sử dụng JavaScriptSerializer cho cả serialization và deserialization trong quá khứ và nó luôn luôn phục vụ tôi tốt :) – mattytommo

+1

Oded vì nó có sẵn trong khung .Net. Không yêu cầu bên thứ ba DLL. –

7

Tôi tìm thấy một giải pháp rất giống với DPeden, mặc dù không có nhu cầu sử dụng các IDictionary, bạn có thể vượt qua trực tiếp từ một ExpandoObject đến một chuyển đổi JSON :

dynamic foo = new ExpandoObject(); 
foo.Bar = "something"; 
foo.Test = true; 
string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo); 

và đầu ra trở thành:

{"Bar":"something","Test":true}