【问题标题】:Render C# class as javascript将 C# 类渲染为 javascript
【发布时间】:2011-11-06 14:39:23
【问题描述】:

我正在寻找一种将 C# 类对象呈现为 javascript 的方法。比如这个类定义:

public class Foo
{ 
   public string Bar1 { get; set; }
   public string Bar2 { get; set; }
}

应该将(填充了值的 Foo 类的对象)渲染为:

foo: 
{
    bar1: 'bar1value',
    bar2: 'bar2value'
}

我知道如何绕过反射,但在重新发明轮子之前,我想知道是否有任何库已经在做这些事情。

【问题讨论】:

    标签: c# javascript


    【解决方案1】:

    这可能会做你想做的事:http://json.codeplex.com/

    还有一个例子:http://james.newtonking.com/projects/json/help/

    如果我记得,JSON 需要为键名加上引号(尽管可能会容忍缺少引号),但我不确定 Javascript,所以我用以下 HTML 对其进行了测试,它似乎可以在 Chrome、IE、和火狐。

    <html>
    <body>
        <script type="text/javascript">
            o = { "a":1, "b":2 };
            alert(o.a +" " +o.b) ; 
        </script>
    </body>
    </html>
    

    希望您能够直接使用这种语法(RFC 4627 表示 JSON 是 Javascript 的子集)。

    【讨论】:

    • 这正是我所需要的,非常感谢。也许您对我的后续问题也有答案? stackoverflow.com/questions/8028069/…
    • 欢迎。不过,我不确定我对您其他问题的回答是否会有所帮助。
    • 嗯实际上我不太确定这是否确实是我需要的。区别:json.net 输出 foo { "bar1": "bar1value" } 我需要的地方: foo { bar1 : "bar1value" } (注意缺少的引号)。如果我需要做很多自定义的事情来让它工作,我最好编写自己的序列化处理程序。
    • 我添加了一个测试用例。引号语法也适用于Rhino
    • 是的,有没有引号似乎并不重要。所以我现在使用带引号的代码,这似乎工作正常。谢谢
    【解决方案2】:

    您可以将对象序列化为 JSON。

    在这里查看我的答案:Any way to pass an object from c# code behind to javascript?

    【讨论】:

      【解决方案3】:

      您可能正试图通过 post 将 C# 对象传递给视图。

      [HttpPost]
      public JsonResult GetDataController(
          string param1,
          string param2) 
      {
          var myFoo = new Foo
          {
              Bar1 = "Param1 is: " + param1,
              Bar2 = "Param2 is: " + param2
          };
      
          return Json(myFoo);
      }
      

      现在,在您看来,通过 ajax 请求对象:

      $.ajax({
          type: 'POST',
          datetype: 'json',
          url: '@Url.Action("GetDataController")',
          data: {
              param1: "line1",
              param2: "line2"
          },
          success: function (data, textStatus, xhr) {
              alert("I've received this JSOn object:\n\n" + data);
          },
          error: function (xhr, textStatus, errorThrow) {
              alert("Error while requesting JSON");
          }
      

      【讨论】:

      • 这个答案对 MVC 来说太具体了。
      • Ups,你是对的!我虽然是通过最喜欢的标签之一来到这里的 asp.net-mvc-3.
      • 不,不创建控制器逻辑!
      【解决方案4】:
       Dim RegisteredUsers As New List(Of Person)()
              RegisteredUsers.Add(New Person With {.PersonID = 1, .Name = "Bryon Hetrick", .Registered = True})
              RegisteredUsers.Add(New Person With {.PersonID = 2, .Name = "Nicole Wilcox", .Registered = True})
              RegisteredUsers.Add(New Person With {.PersonID = 3, .Name = "Adrian Martinson", .Registered = False})
              RegisteredUsers.Add(New Person With {.PersonID = 4, .Name = "Nora Osborn", .Registered = False})
          Dim serializer As New JavaScriptSerializer()
          Dim serializedResult = serializer.Serialize(RegisteredUsers)
          ' Produces string value of: 
          ' [ 
          '     {"PersonID":1,"Name":"Bryon Hetrick","Registered":true}, 
          '     {"PersonID":2,"Name":"Nicole Wilcox","Registered":true}, 
          '     {"PersonID":3,"Name":"Adrian Martinson","Registered":false}, 
          '     {"PersonID":4,"Name":"Nora Osborn","Registered":false} 
          ' ] 
      
          Dim deserializedResult = serializer.Deserialize(Of List(Of Person))(serializedResult)
          ' Produces List with 4 Person objects 
      

      【讨论】:

      • 问题用 C# 标记。
      • 对不起,不懂 C#,我想尽可能多地提供指导。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 2015-06-06
      相关资源
      最近更新 更多