2013-04-05 52 views
0

我有與當前的Javascript庫進行互操作使用JSON數據AJAX和JSON數據如下所示得到一個Silverlight項目:如何將複雜的JSON轉換成JS成.NET類在Silverlight

{"javaClass":"java.util.ArrayList","list":[{"JOB_NUM":"21", "DEADLINE":{"time":1359583200000,"javaClass":"java.sql.Timestamp"}, "javaClass":"JobEntity"}]} 

在Silverlight中,我創建了一個「橋」類來將JSON數據轉換爲C#類。主要方法如下:

public static T Invoke<T>(string method) 
    { 
     ScriptObject result = HtmlPage.Window.Eval("$.parseJSON("+method+")") as ScriptObject; 
     if (result != null) 
     { 
      ScriptObject data = result.GetProperty("list") as ScriptObject; 
      if (data != null) 
       return data.ConvertTo<T>(); 
     } 

     return default(T); 
    } 

此外,我在這裏附加實體POCO類(簡化)。

public class JobEntity 
{ 
    public string JOB_NUM {get; set;} 
    public string DEADLINE {get; set;} 
} 

的問題是如何命名的「大限」在C#中的日期格式的字符串的時間戳轉換。我想這可能是與DEADLINE屬性中的setter訪問器有關的東西。

順便說一下,我發現奇怪的是,如果評估值本身是Javascript,那麼我不能使用ScriptObject的ConvertTo<string>()方法。也就是說,我只能用這種方式解析字符串:

scriptObject.ToString(); //ConvertTo<string>() will not work. 

這裏有什麼意思?

任何幫助將不勝感激。

回答

1

使用Newtonsoft.JSON組件可以解析JSON字符串轉換成JToken對象,然後找到日期屬性,與接受這個問題的答案Deserializing JSON to .NET object using Newtonsoft (or LINQ to JSON maybe?)

+0

謝謝,託尼。這絕對是一個可行的選擇。儘管如此,我只是想知道在目前的基礎上只需要一些小的修復就可以解決問題,因爲ConvertTo在大多數情況下都能勝任。值得注意的是,在這種情況下,當我使用該方法時,DEADLINE屬性變成了「對象」。我想可能有一些方法來手動解析它。另一方面,使用Linq到JSON或類似的東西可能不適合我的項目,這意味着我必須爲我的實體類組成一些映射代碼。無論如何,這絕對是一個解決方案。 :) – 2013-04-05 19:51:14