将C#类粘贴为JSON在VS 2012中

7
在VS2012中,可以通过右键菜单->粘贴特殊方式将JSON粘贴为c#类。但是有没有办法反过来呢?将c#类作为JSON粘贴?
我认为许多开发人员首先使用EF DBContext编写服务器代码,然后再编写客户端JavaScript代码。手动编写json总是很麻烦。
例如:
// a model class 
public class SampleTodoItem
{
    public int Id { get; set; }            
    public string Description { get; set; }
    public bool IsDone { get; set; }      
}

然后我想在我的JavaScript客户端代码中有与JSON相同的模型。当然,在生成的JSON中必须有虚拟数据。

var model = {
    id: 0,
    description: 'dummy',
    isDone: false
};

我总是不得不手动完成这个任务,这很糟糕。

据我所知,我需要使用这些“JSON模型”来使用Knockout或AngularJS将JavaScript数据绑定到HTML视图。也有可能我没有完全理解这个过程。


当然,在生成的 JSON 中必须有虚拟数据。 - daniel
2
生成了什么JSON?我仍然不知道你在问什么,因为你的问题太不清楚了。 - Jon Skeet
如果在 MVC Web API 中的请求中返回你的类,我理解这就是你想要的,那么你会得到该类的 JSON 格式。 - LukeHennerley
这个问题现在比起一开始好多了。下次你提问的时候,请考虑从一开始就把它表述得如此清晰(带上你现在补充的动机)。 - Jon Skeet
是的,抱歉 @jonskeet。 - daniel
显示剩余2条评论
1个回答

3

有多种方法可供选择。如果您打算将c#类转换为json表示,最简单的方法是使用诸如JavaScript序列化程序或JSON.Net之类的东西对数据表示进行序列化。以下是一个示例,它将给定的IEnumerable转换为其JSON表示形式。

 public static string ToJSONString<T>(this IEnumerable<T> items)
   {
        var jsonString =  JsonConvert.SerializeObject(items, Formatting.Indented, new JsonSerializerSettings
            {
                ContractResolver = new LowerCaseContractResolver(),
                NullValueHandling = NullValueHandling.Ignore
            });

        jsonString = jsonString.Replace("\r\n", string.Empty);

        return jsonString;

    }

另一种方法(适用于Knockout视图模型)是使用T4模板来生成它。如果您计划使用模型生成JavaScript文件,则可以使用相同的概念来生成您的表示。您可以在此处找到它:http://www.codeproject.com/Articles/578827/Generate-Knockout-Viewmodels-using-T4-templates

很好。如果它能被作为Paste Special的扩展来实现,那将是非常棒的。 - Kangkan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接