ranio Ответов: 3

Как отменить выделение строки json в C#?


Как отменить выделение строки json в c#.
я беру значения для соответствующих элементов json и получаю исключение ниже:

Недопустимый объект, переданный в': 'или '}' ожидаемая сериализация json c#

Что я уже пробовал:

Построение Json-кода, как показано ниже:
 string json = @"  
   [
    {
       
        {                                         
        ""bankId"": """ + hsk.bankid + @""",
        ""password"": """ + hsk.password + @"""                                         
        } 

     
 }
]
";

Выход

   [
    {
       
        {                                         
        "bankId": "011",
        "password": "test123"                                         
        } 

     
 }
]

Deserializing as below:
<pre>   HandShakeRequest resultT = new JavaScriptSerializer().Deserialize<HandShakeRequest>(json);

3 Ответов

Рейтинг:
2

CPallini

Цитата:
[
{

{
"bankId": "011",
"пароль": "test123"
}


}
]


Это недопустимая строка JSON. Вы можете проверить это, например, с помощью JSONLint[^]. Смотреть также Объекты JSON в w3schools[^].


Рейтинг:
1

OriginalGriff

Попробуйте удалить один набор фигурных скобок:

[{"bankId":"011","password":"test123"}]
Но... простые текстовые пароли? Не очень хорошая идея ... Криминальный Кодекс 1[^]
Никогда не храните пароли в открытом виде - это серьезная угроза безопасности. Здесь есть некоторая информация о том, как это сделать: Хранение паролей: как это сделать.[^]


Рейтинг:
0

Vincent Maverick Durano

Как они уже отмечали, ваша строка JSON недействительна, поэтому вы получаете ошибку. Чтобы предотвратить недопустимый формат строки JSON, вы можете написать метод расширения или статический метод для проверки валидности. Например:

public static bool IsValidJson(string strInput)
        {
            strInput = strInput.Trim();
            if ((strInput.StartsWith("{") && strInput.EndsWith("}")) || //For object
                (strInput.StartsWith("[") && strInput.EndsWith("]"))) //For array
            {
                try
                {
                    var obj = JToken.Parse(strInput);
                    return true;
                }
                catch (JsonReaderException jex)
                {
                    //Exception in parsing json
                    //jex.Message;
                    return false;
                }
                catch (Exception ex) //some other exception
                {
                    //ex.ToString()
                    return false;
                }
            }
            else
            {
                return false;
            }
        }


Тогда вы можете сделать:

var isValid = IsValidJson(jsonString);

if(isValid){
   //deserialize here
}


Также обратите внимание на риск безопасности, как указано в OriginalGriff.