2011-09-30 94 views
4

我的Asp.Net MVC應用程序操作通過序列化幾個C#對象之一來返回JSON,具體取決於具體情況(如果發生錯誤,如果檢索到一種數據類型,則爲一種數據類型等)。如何檢查Json是否匹配特定的C#類型?

當我嘗試在C#windows服務中使用JSON時,我無法找出返回哪種類型的JSON。不幸的是,從我所看到的JSON序列化器(JSON.Net和其他任何RestSharp使用的)都沒有問題,如果沒有JSON匹配,則創建一個空對象。

我明白爲什麼會發生這種情況,但我很困惑如何確定從JSON序列化的值是否合法,或者如果沒有JSON屬性匹配,並且序列化器剛剛創建了空對象。

有誰知道我會如何確定JSON和我想要反序列化的類型之間是否存在匹配?

回答

0

我會推薦使用try catch塊,如果您的反序列化會拋出無效的參數異常,那麼字符串的格式不正確。 如果您正在使用System.Web.Script.Serialization

JavaScriptSerializer sel = new JavaScriptSerializer(); 

try 
{ 

    return sel.Deserialize<List<YourObjectType>>(jSONString); 

} 
catch(System.ArgumentException e) 
{ 

    return null; 

} 
+3

反序列化會不會引發錯誤,這反而只是創建一個空的C#對象 – KallDrexx

0

我不知道如何JSON和C#的類型之間的匹配。但是,如果你要檢查是匹配合適的值的所有屬性在JSON,你可以做的Json Serialization Sttributes

這裏我有C#類型:

[JsonObject(ItemRequired = Required.Always)] 
public class Event 
{ 
    public string DataSource { get; set; } 
    public string LoadId { get; set; } 
    public string LoadName { get; set; } 
    public string MonitorId { get; set; } 
    public string MonitorName { get; set; } 
    public DateTimeOffset Time { get; set; } 
    public decimal Value { get; set; } 
} 

我飾那種類型與屬性[JsonObject(ItemRequired = Required.Always)]從所有屬性要求從JSON文本中填充適當的屬性。

有三兩imporatnt件事:

  • 如果你試圖反序列化不包含像事件類會拋出異常性質JSON文本。
  • 如果JSON包含這些屬性,但不包含值,它將通過反序列化。
  • 如果JSON文本包含與Event類相同的屬性,但也包含其他屬性,它仍然會通過反序列化。

下面是示例代碼:如果沒有JSON屬性匹配您的泛型類型

var message = @"{ 'DataSource':'SomeValue','LoadId':'100','LoadName':'TEST LOAD','MonitorId':'TEST MONITOR','MonitorName':'TEST MONITOR','Time':'2016-03-04T00:13:00','Value':0.0}"; 
try 
{ 
    var convertedObject = JsonConvert.DeserializeObject<Event>(message); 
} 
catch (Exception ex) 
{ 

} 
相關問題