2012-11-30 26 views
17

Tôi nhận được chuỗi JSON trong hành động điều khiển MVC4/.NET4 WebApi. Tham số của hành động là dynamic vì tôi không biết bất cứ điều gì ở đầu nhận về đối tượng JSON mà tôi nhận được.JContainer động (JSON.NET) & Lặp lại các thuộc tính trong thời gian chạy

public dynamic Post(dynamic myobject)   

JSON được phân tích cú pháp tự động và đối tượng dynamic kết quả là Newtonsoft.Json.Linq.JContainer. Tôi có thể, như mong đợi, đánh giá các thuộc tính trong thời gian chạy, vì vậy nếu JSON chứa một cái gì đó như myobject.myproperty thì bây giờ tôi có thể lấy đối tượng động nhận được và gọi myobject.myproperty trong mã C#. Càng xa càng tốt.

Bây giờ tôi muốn lặp qua tất cả các thuộc tính được cung cấp như một phần của JSON, bao gồm các thuộc tính lồng nhau. Tuy nhiên, nếu tôi làm myobject.GetType().GetProperties(), nó chỉ trả về các thuộc tính của Newtonsoft.Json.Linq.JContainer thay vì các thuộc tính mà tôi đang tìm kiếm (là một phần của JSON).

Bất kỳ ý tưởng nào về cách thực hiện việc này?

+0

[này] (http://code.msdn.microsoft .com/Supporting-different-data-b0351c9a) bài viết có thể giúp bạn, kiểm tra những gì anh ta đang làm trong phương thức 'DeserializeRequest'. –

Trả lời

38

Tôi nghĩ rằng đây có thể là một điểm khởi đầu

dynamic dynObj = JsonConvert.DeserializeObject("{a:1,b:2}"); 

//JContainer is the base class 
var jObj = (JObject)dynObj; 

foreach (JToken token in jObj.Children()) 
{ 
    if (token is JProperty) 
    { 
     var prop = token as JProperty; 
     Console.WriteLine("{0}={1}", prop.Name, prop.Value); 
    } 
} 

EDIT

này cũng có thể giúp bạn

var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(jObj.ToString()); 
+0

Cảm ơn bạn! Làm thế nào điều này sẽ làm việc nếu JSON được lồng nhau? – Alex

+1

@ Alex Sau đó mọi thứ trở nên phức tạp và bạn có thể phải viết một hàm đệ quy. Bạn nên luôn luôn kiểm tra JObject, JArray, JProperty vv, Về cơ bản bạn nên lặp lại những gì 'JsonConvert.DeserializeObject ' nào. –

+2

@ Alex Tôi đoán là deserializing thành một 'Dictionary ' cũng có thể giúp ích. Xem chỉnh sửa. –

Các vấn đề liên quan