Szukam sposobu na renderowanie obiektu klasy C # do JavaScript. Na przykład definicja tej klasy:

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

Powinien renderować (obiekt foo klasy z napełnionymi wartościami) jako:

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

Wiem, że wokół refleksji, ale przed rozpoczęciem koła od razu zastanawiałem się, czy są jakieś biblioteki już robią te rzeczy.

0
Jasper 6 listopad 2011, 18:39

4 odpowiedzi

Najlepsza odpowiedź

Może to zrobić, co chcesz: http://json.codeplex.com/

Istnieje również przykład: http://james.newtonking.com/projects/json/help/.

Jeśli pamiętam, JSON wymaga cytatów na nazwy kluczowych (choć prawdopodobnie toleruje ich brak), ale nie byłem pewien o JavaScript, więc przetestowałem go z następującym HTML, który wydaje się być użyteczny w Chrome, tj. I Firefox.

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

Mam nadzieję, że będziesz mógł korzystać z takiej składni bezpośrednio (RFC 4627 mówi, że JSON jest podzbiór JavaScript).

2
Vlad 6 listopad 2011, 16:43

Możesz serializować swój obiekt do JSON.

Zobacz tutaj: Każdy sposób, aby przejść obiekt z C # kodu za JavaScript?

2
Community 23 maj 2017, 12:03

Prawdopodobnie próbujesz przekazać obiekt C # do widoku przez post.

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

    return Json(myFoo);
}

A teraz, jeśli chcesz zażądać obiektu przez 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
Joao 6 listopad 2011, 14:50
 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 
-1
Artjom B. 30 lipiec 2014, 15:07