2014-06-05 14 views
37

Tôi đã sau ...Kiểm tra rỗng/null JToken trong một JObject

JArray clients = (JArray)clientsParsed["objects"]; 

foreach (JObject item in clients.Children()) 
{ 
    // etc.. SQL params stuff... 
    command.Parameters["@MyParameter"].Value = JTokenToSql(item["thisParameter"]); 
} 

JTokenToSql trông như thế này ...

public static object JTokenToSql(JToken obj) 
{ 
    if (obj.Any()) 
     return (object)obj; 
    else 
     return (object)DBNull.Value; 
} 

Tôi đã thử ((JObject)obj).Count cũng .. Nhưng doesn' t dường như đang làm việc.

Trả lời

79

Để kiểm tra xem thuộc tính có tồn tại trên JObject hay không, bạn có thể sử dụng cú pháp khung hình vuông và xem liệu kết quả có rỗng hay không. Nếu thuộc tính tồn tại, một JToken sẽ luôn được trả lại (ngay cả khi nó có giá trị null trong JSON).

JToken token = jObject["param"]; 
if (token != null) 
{ 
    // the "param" property exists 
} 

Nếu bạn có một JToken trong tay và bạn muốn để xem nếu nó không bị để trống, tốt, điều đó phụ thuộc vào loại JToken nó là gì và làm thế nào bạn định nghĩa "trống rỗng". Tôi thường sử dụng một phương pháp khuyến nông như thế này:

public static class JsonExtensions 
{ 
    public static bool IsNullOrEmpty(this JToken token) 
    { 
     return (token == null) || 
       (token.Type == JTokenType.Array && !token.HasValues) || 
       (token.Type == JTokenType.Object && !token.HasValues) || 
       (token.Type == JTokenType.String && token.ToString() == String.Empty) || 
       (token.Type == JTokenType.Null); 
    } 
} 
+1

tôi sẽ làm cho nó phương pháp khuyến nông như: public static bool IsNullOrEmpty (mã thông báo JToken này) {...} để sử dụng như Mã thông báo JToken = jObject ["param"]; bool empty = token.IsNullOrEmpty() –

+0

Bạn không thể 'ToSrting' the' JToken' và kiểm tra 'IsNullOrWhiteSpace'? (Sau khi kiểm tra 'JToken' không phải là null của khóa học) – Coops

+0

@CodeBlend Điều đó sẽ không hoạt động đối với một đối tượng hoặc một mảng - các phiên bản được tuần tự hóa của các giá trị đó khi trống là' {} 'và' [] 'tương ứng. –

7

Bạn có thể tiến hành như sau để kiểm tra xem một giá trị gia tăng JToken là null

JToken token = jObject["key"]; 

if(token.Type == JTokenType.Null) 
{ 
    // Do your logic 
} 
Các vấn đề liên quan