2011-11-06 58 views
0

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

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

应该呈现(Foo类的一个对象,具有填充的值)为:

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

我知道我周围的反射方式,而是全部重新发明轮子之前,我想知道是否有任何图书馆已经在做这些事情。

回答

2

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

这里有一个例子,以及:http://james.newtonking.com/projects/json/help/

如果我还记得,JSON要求的键名引号(尽管可能容忍其缺乏),但我没”确定使用Javascript,所以我使用以下HTML进行了测试,这似乎可以在Chrome,IE和Firefox中使用。

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

希望,你就可以直接使用这样的语法(RFC 4627说,JSON是JavaScript的一个子集)。

+0

这正是我需要的,非常感谢你。也许你对我的后续问题也有答案? http://stackoverflow.com/questions/8028069/json-net-ignoring-class-with-only-null-properties – Jasper

+0

欢迎。不过,我不确定我对你的其他问题的回答会有多大帮助。 – Vlad

+0

嗯实际上我不太确定这是否真的是我需要的。区别在于:json.net输出foo {“bar1”:“bar1value”}我需要:foo {bar1:“bar1value”}(注意缺失的引号)。如果我需要做大量的自定义事情才能实现它,我最好写自己的序列化处理程序。 – Jasper

0

你可能想一个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"); 
    } 
+0

这个答案对于MVC来说太具体了。 – Birey

+0

Ups,你是对的!我虽然通过一个标签* asp.net-mvc-3 *到达了这里。 – Joao

+0

不,不创建控制器逻辑! – Jasper

-1
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 
+2

这个问题用C#标记。 – Mizipzor

+0

对不起,不知道C#,我想尽可能地提供指导。 –