2012-10-17 4 views
0

У меня этот класс.Вернуться объект как json

public class SDS 
{ 
    public Guid A { get; set; } 

    public Guid B { get; set; } 

    public String C { get; set; } 
} 

я вернуть JSON как этот

public HttpResponseMessage Val() 
     { 

       SDS svr = new SDS(); 
       svr.A = ... 
       svr.B = ... 
       svr.C = ... 

    return Request.CreateResponse(HttpStatusCode.OK, json_serializer.Serialize(svr), "application/json"); 
} 

В стороне клиента я использую JQuery, как этот

var obj = jQuery.parseJSON(jqXHR.responseText); 

Проблема, что JSON, который получает возвращается, как это и я не удается повторить эти значения или получить доступ к элементам через индекс:

{"A":"3a9779fe-9c92-4208-b34d-5113e0548d50","B":"206575a5-8a90-4a13-89ec-910e5a9a35a1","C":"Meta"} 

Чтобы решить эту проблему, я должен был сделать это, и это работает:

obj = jQuery.parseJSON('{"List":[' + obj + ']}'); 

Мой вопрос есть ли способ использовать атрибут класса, так что она возвращает JSON, что я могу использовать?

[SomeAttribute name="List"] 
public class SDS 
{ 
    public Guid A { get; set; } 

    public Guid B { get; set; } 

    public String C { get; set; } 
} 

... ... ...

Update2:

Этот вопрос остается открытым, как ни один из предоставленных ответов не смогли произвести починку.

ответ

2

Вы можете вернуть JsonResult, позвонив по телефону Json() в свой метод действия.

public ActionResult Get(int id) 
{ 
    var item = ... 
    return Json(item); 
} 
+0

Спасибо, но я получаю. Имя «Json» не существует в текущем контексте. Возможно, потому, что я использую WEB API – user1615362

+0

. Вам следует обновить свой вопрос с помощью этой информации. – jrummell

0

Пробовали ли вы использовать JsonResult из System.Web.Mvc.JsonResult?

public JsonResult Val() {} 

Надеюсь, что это поможет.

+0

Я забыл отметить, что я использую WEB API – user1615362

0

Ну, вы возвращающая один объект, а не список, но вы могли бы сделать:

public HttpResponseMessage Val() 
{ 

    SDS svr = new SDS(); 
    svr.A = ... 
    svr.B = ... 
    svr.C = ... 

    var list = new {List = new [] {svr}}; 

    return Request.CreateResponse(HttpStatusCode.OK, json_serializer.Serialize(svr), "application/json"); 
} 
+0

var list = new {List = svr}; возвращает {«Список»: {«A»: «3a9779fe-9c92-4208-b34d-5113e0548d50», «B»: «206575a5-8a90-4a13-89ec-910e5a9a35a1», «C»: «Meta»}}, а не {«Список»: [{«A»: «3a9779fe-9c92-4208-b34d-5113e0548d50», «B»: «206575a5-8a90-4a13-89ec-910e5a9a35a1», «C»: «Meta»}]} as он должен для этого работать – user1615362

+0

См. мой отредактированный ответ. –

+0

Я понятия не имею, почему, но ваш код возвращает json, как это "{" List ": [{...}]}", вместо этого {"List": [{...}]}. jQuery.parseJSON не анализирует «{« Список »: [{...}]}« – user1615362

0

JSON возвращается правильно, ничего не меняют в контроллере

.. но в цикле JS объект с для в цикле

for(var propertyName in obj){ 
    ... 
} 

ИмениСвойства дает A, B и C и ...

var value = obj[propertyName] 

дает значение

+0

jQuery.parseJSON не анализирует json в массиве, поэтому obj [n] не работает. – user1615362

+0

Для работы над объектом он обращается к свойствам объекта, как будто вы проходили через ключи словаря, я отредактирую, чтобы уточнить –

+0

Но объект является строкой – user1615362

0

добавить ApiController и используя System.Web.Http;

+1

Это слишком короткий, чтобы быть хорошим ответом. Пожалуйста, подумайте над расширением или переходом к комментарию. –

Смежные вопросы