【问题标题】:How can I generate a JavaScript object literal in C#?如何在 C# 中生成 JavaScript 对象文字?
【发布时间】:2012-04-24 07:05:37
【问题描述】:

我需要在 C# 代码中创建以下 JavaScript 对象文字,作为字符串,并且正在寻找一些关于如何最好地做到这一点的技巧。

model: {
    id: "Id",
    fields: {
        Surname: { type: "string", validation: { required: true } },
        FirstName: { type: "string", validation: { required: true } },
        PrivateEmail: { type: "string", validation: { required: true } },
        DefaultPhone: { type: "string" },
        CompanyName: { type: "string" },
        CreateDate: { type: "date" },
        LastLoginDate: { type: "date" },
        IsLockedOut: { type: "boolean" }
    }
}

这定义了一个带有 model 属性的客户端对象,该属性反映了我的 MVC4 视图模型中每一行的外观。我可以使用普通反射来生成字符串文字,但我宁愿以某种方式利用 .NET 中已经可用的 JSON 序列化服务。为此,我想我需要创建一个匿名对象,其属性对应于上面的 JS 属性。我怎么能这样做?

编辑: 我需要遍历视图模型类中的属性并生成一个 C# 对象,该对象将序列化为类似于上述的视图模型类的 JavaScript“转换”。

【问题讨论】:

  • 生成的代码应该是这样的,还是动态的?你不能把它放在一个文字字符串中吗?
  • @Guffa 我想将代码放在文字字符串中;我只是不想使用 icky 字符串 concat 来滚动自己的序列化程序。
  • 好的,我给了你一个文字字符串的解决方案。如果你不想要那个,你想要什么?
  • 我想在 C# 字符串中生成一个 JavaScript 对象文字。我认为我的标题暗示了这一点。很多json序列化就是这样完成的。

标签: c# json c#-4.0 asp.net-mvc-4


【解决方案1】:

我想他可能要问的是把 C# 对象转换成 JSON 字符串。

试试这个:

http://msdn.microsoft.com/en-us/library/system.json.jsonobject%28v=vs.95%29.aspx

http://james.newtonking.com/pages/json-net.aspx

编辑(一个如何使用的例子):

Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };

string json = JsonConvert.SerializeObject(product);
//{
//  "Name": "Apple",
//  "Expiry": new Date(1230422400000),
//  "Price": 3.99,
//  "Sizes": [
//    "Small",
//    "Medium",
//    "Large"
//  ]
//}

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);

编辑:

这是@yyamil的评论:

如果您不想创建一个新类来序列化一个 json 对象,也可以使用匿名对象:

var notificationPayload = new
{
    notification = new
    {
        title = "Title", 
        body = "body"
    }
};

string json = JsonConvert.SerializeObject(notificationPayload);

【讨论】:

  • 谢谢马修,我希望我的问题不像@Guffa 建议的那么迟钝,但我也在询问如何将这些属性动态获取到 C# 对象中,以便它们得到正确序列化.
  • 我需要创建一个动态对象,每个属性都有一个 Field 属性,例如在产品中。这部分我的问题说得不够清楚,但你回答的部分是正确的。
  • @ProfK 我记得 CodeProject 上有一个项目允许您获取 JSON 结果并创建所有相关对象,包括序列化/反序列化方面(使用 NewtonKing Json.NET 库)
  • 很好的答案。如果您不想创建一个新类来序列化 json 对象,也可以使用匿名对象: var notificationPayload = new { notification = new { title = "Title", body = "body" } };字符串 json = JsonConvert.SerializeObject(notificationPayload);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 2014-09-15
  • 1970-01-01
相关资源
最近更新 更多