2014-02-04 2 views
0

Нашего запрос GET возвращает следующий ответ:AngularJS не разбор нашего JSON свойства массива

{ 
    "access_token": "pi7ID4bsZIC9yN ... 76gnblw", 
    "token_type": "bearer", 
    "expires_in": 1209599, 
    "userName": "super0", 
    "userRoles": "["member", "admin"]", 
    ".issued": "Tue, 04 Feb 2014 05:07:51 GMT", 
    ".expires": "Tue, 18 Feb 2014 05:07:51 GMT" 
} 

Проблема заключается в том, что AngularJS разбирает его в следующем объект.

data: Object 
    .expires: "Tue, 18 Feb 2014 05:07:51 GMT" 
    .issued: "Tue, 04 Feb 2014 05:07:51 GMT" 
    access_token: "pi7ID4bsZIC9yN ... 76gnblw" 
    expires_in: 1209599 
    token_type: "bearer" 
    userName: "super0" 
    userRoles: "["member", "admin"]" 
    __proto__: Object 

Нам нужно «userRoles», чтобы проанализировать массив JavaScript, а не строку, как показано. Как мы можем это сделать?

ответ

1

Это недействительно JSON. Массив не должен указываться.

Он должен выглядеть следующим образом, вместо:

{ 
    "access_token": "pi7ID4bsZIC9yN ... 76gnblw", 
    "token_type": "bearer", 
    "expires_in": 1209599, 
    "userName": "super0", 
    "userRoles": ["member", "admin"], 
    ".issued": "Tue, 04 Feb 2014 05:07:51 GMT", 
    ".expires": "Tue, 18 Feb 2014 05:07:51 GMT" 
} 
+0

Aha. В этом есть смысл. Проблема в том, что я не могу вернуть неупорядоченный массив, потому что C# создает ответ JSON GET из словаря . Значение свойства JSON должно быть строкой, и я не знаю, как включать квадратные скобки вне данных кавычек .Add («userRoles», «['admin', 'member']"); ' –

+0

Можете ли вы сделать что вместо словаря "значение ключа userRoles может быть Array (или IEnumerable какого-то рода)? Затем он должен правильно сериализоваться. –

+0

Я мог бы попробовать это, но я не решаюсь. Конструктор AuthenticationProperties() ASP.NET Identity использует словарь . Реализация нашего собственного класса AuthenticationProperties может сделать трюк. Это потребует некоторой работы. Хм. –

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