【问题标题】:How to convert a complex JSON in JS into a .NET class in Silverlight如何将 JS 中的复杂 JSON 转换为 Silverlight 中的 .NET 类
【发布时间】:2013-04-05 13:09:25
【问题描述】:

我有一个 Silverlight 项目,它必须与当前的 Javascript 库互操作才能使用 AJAX 获取 JSON 数据,并且 JSON 数据如下所示:

{"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”的时间戳转换为日期格式的字符串。我猜这可能与 DEADLINE 属性中的 setter 访问器有关。

顺便说一句,如果评估的值是 Javascript 中的字符串本身,我无法使用 ScriptObject 的 ConvertTo&lt;string&gt;() 方法,这很奇怪。即我只能这样解析字符串:

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

这里有什么意义?

任何帮助将不胜感激。

【问题讨论】:

    标签: c# javascript .net json silverlight


    【解决方案1】:

    使用 Newtonsoft.JSON 程序集,您可以将 json 字符串解析为 JToken 对象,然后找到 date 属性,就像这个问题的公认答案Deserializing JSON to .NET object using Newtonsoft (or LINQ to JSON maybe?)

    【讨论】:

    • 谢谢,托尼。这绝对是一个可行的选择。尽管如此,我只是想知道在当前的基础上进行一些小的修复是否会解决问题,因为 ConvertTo 在大多数情况下都可以完成这项工作。值得注意的是,在这种情况下,当我使用该方法时,DEADLINE 属性原来是一个“对象”。我想可能有一些方法可以手动解析它。另一方面,在我的项目中使用 Linq to JSON 或类似的东西可能不太合适,这意味着我必须为我的实体类编写一些映射代码。无论如何,这绝对是一个解决方案。 :)
    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多