Неверные примитивы Json - PullRequest
       6

Неверные примитивы Json

6 голосов
/ 06 августа 2010

Не могли бы вы помочь мне решить эту проблему.У меня есть одно приложение asp.net, в котором я использую сериализатор Javascript для сериализации набора данных с последующим преобразованием в список.Этот код показан ниже.

JavaScriptSerializer json = new JavaScriptSerializer();
strJson = json.Serialize(aclDoc);

Но во время десериализации я получил одно исключение ArguementException, как Invalid Json Primitives с моим значением Json.У меня значение json

[{"Id":"F79BA508-F208-4C37-9904-DBB1DEDE67DB","App_Id":"ScriptFlow","Name":"New form","FriendlyName":"","Read":"Revoke","ReadRule":"a353776f-cbdc-48b7-a15b-4a2316d19b05","Update":"Grant","UpdateRule":"be30c34e-33ec-4c0a-9f09-4fd483f5f1b9","Create":"Revoke","CreateRule":"898dce4d-4709-45b6-8942-d7efb07cbd86","Delete":"Revoke","DeleteRule":"aa14d435-dec8-4ade-ad9b-830ae5ee15d0"}][{"Id":"1","Doc_Id":"858E013C-5775-4FDF-AA1E-2C84053EE39F","Name":"TextBox1","FriendlyName":"TextBox1","Read":"Grant","ReadRule":"0a2e3c0e-ad8f-4f75-9160-cfd9827ac894","Update":"Grant","UpdateRule":"ecad3cf4-104f-44dc-b815-de039f3a0396"},{"Id":"2","Doc_Id":"858E013C-5775-4FDF-AA1E-2C84053EE39F","Name":"TextBox2","FriendlyName":"TextBox2","Read":"Grant","ReadRule":"81e0e9ef-09f7-4c25-a58e-d5fdfbd4c2ba","Update":"Grant","UpdateRule":"2047f662-c881-413b-a1f9-69f15bf667fc"}]

Код для десериализации:

JavaScriptSerializer json = new JavaScriptSerializer();
lstDoc = json.Deserialize<List<ACLDocument>>(value);
return lstDoc;

, где lstDoc - это коллекция списков типа моего класса

Я получил исключениеthis:

Invalid JSON primitive:
{"Id":"1","Doc_Id":"858E013C-5775-4FDF-AA1E-2C84053EE39F","Name":"TextBox1","FriendlyName":"TextBox1","Read":"Grant","ReadRule":"0a2e3c0e-ad8f-4f75-9160-cfd9827ac894","Update":"Grant","UpdateRule":"ecad3cf4-104f-44dc-b815-de039f3a0396"},{"Id":"2","Doc_Id":"858E013C-5775-4FDF-AA1E-2C84053EE39F","Name":"TextBox2","FriendlyName":"TextBox2","Read":"Grant","ReadRule":"81e0e9ef-09f7-4c25-a58e-d5fdfbd4c2ba","Update":"Grant","UpdateRule":"2047f662-c881-413b-a1f9-69f15bf667fc"}].

Пожалуйста, помогите мне решить эту проблему.Заранее спасибо

Ответы [ 4 ]

4 голосов
/ 06 августа 2010

Ваша входная строка действительно неправильная строка JSON.Вы вводите из двух правильных строк JSON:

[
    {
        "Id": "F79BA508-F208-4C37-9904-DBB1DEDE67DB",
        "App_Id": "ScriptFlow",
        "Name": "New form",
        "FriendlyName": "",
        "Read": "Revoke",
        "ReadRule": "a353776f-cbdc-48b7-a15b-4a2316d19b05",
        "Update": "Grant",
        "UpdateRule": "be30c34e-33ec-4c0a-9f09-4fd483f5f1b9",
        "Create": "Revoke",
        "CreateRule": "898dce4d-4709-45b6-8942-d7efb07cbd86",
        "Delete": "Revoke",
        "DeleteRule": "aa14d435-dec8-4ade-ad9b-830ae5ee15d0"
    }
]

и

[
    {
        "Id": "1",
        "Doc_Id": "858E013C-5775-4FDF-AA1E-2C84053EE39F",
        "Name": "TextBox1",
        "FriendlyName": "TextBox1",
        "Read": "Grant",
        "ReadRule": "0a2e3c0e-ad8f-4f75-9160-cfd9827ac894",
        "Update": "Grant",
        "UpdateRule": "ecad3cf4-104f-44dc-b815-de039f3a0396"
    },
    {
        "Id": "2",
        "Doc_Id": "858E013C-5775-4FDF-AA1E-2C84053EE39F",
        "Name": "TextBox2",
        "FriendlyName": "TextBox2",
        "Read": "Grant",
        "ReadRule": "81e0e9ef-09f7-4c25-a58e-d5fdfbd4c2ba",
        "Update": "Grant",
        "UpdateRule": "2047f662-c881-413b-a1f9-69f15bf667fc"
    }
]

, но вы не можете объединить две строки JSON.Чтобы точно сказать, что вы получите после такой конкатенации, не более JSON-строки.

Я рекомендую вам проверить строки JSON в http://www.jsonlint.com/. Просто вырезайте и вставляйте данные, которые необходимо проверить, и нажмитеПодтвердить "кнопку.

3 голосов
/ 08 июня 2015

Чтобы ответить на вопрос напрямую, поскольку все думают, что это форум Microsoft, а не отвечают напрямую.

Строка отправляется как массив из 2 элементов. Вы забыли '[' в начале строки, которая обозначает, что содержащиеся значения являются структурой массива.

Вставьте '[' в начале строки, и ошибка должна исчезнуть.

0 голосов
/ 10 февраля 2017

Посмотрите, есть ли у вас какие-либо // или закомментированные строки в проекте.

0 голосов
/ 06 августа 2010

Это небольшой полезный инструмент для проверки объектов JSON:

http://jsonviewer.codeplex.com/

...