Прочитайте тип данных MySQL JSON и приведите его к списку <Int>в C # - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь вернуть список чисел из базы данных mysql с типом данных JSON в таблице.

mysql.connector в c # думает, что тип данных - VARCHAR, поэтому в основном я получаю взамен "[1, 2, 3]" из базы данных.

Мне нужно привести строку вПеречислите <<em> INT >, чтобы я мог работать с ним напрямую.

, чтобы быть более конкретным, это то, что я получаю от читателя mysql

string mylist = "[1, 2, 3]"

, и я хочупреобразуйте его в

List<Int> mylist_int = [1, 2, 3]

Так что, если есть способ прочитать тип данных JSON из базы данных непосредственно в формате JSON, это было бы здорово.

в качестве альтернативы, я ищу способ разборасписок строк и преобразовать его в собственный список c #.

Спасибо,

Ответы [ 3 ]

2 голосов
/ 23 апреля 2019

Используйте синтаксический анализатор JSON, например JSON.NET , для анализа строки JSON, например:

var json=reader.GetString(0);
//Returns a List<int>
var myList=JsonConvert.DeserializeObject<List<int>>(json);

или

var jsonArray=JArray.Parse(json);

MySQL Connector в явном видерассматривает JSON как строку , он не «думает», что это текст:

    case MySqlDbType.Set:
    case MySqlDbType.Enum:
    case MySqlDbType.String:
    case MySqlDbType.VarString:
    case MySqlDbType.VarChar:
    case MySqlDbType.Text:
    case MySqlDbType.TinyText:
    case MySqlDbType.MediumText:
    case MySqlDbType.LongText:
    case MySqlDbType.JSON:
    case (MySqlDbType)Field_Type.NULL:
      return new MySqlString(type, true);

В собственных тестах библиотеки используется GetString() для чтения данных JSON :

[Fact]
public void CanReadJsonValue()
{
  ...
  using (MySqlDataReader reader = cmd.ExecuteReader())
  {
    Assert.True(reader.Read());
    Assert.Equal("[\"a\", {\"b\": [true, false]}, [10, 20]]", reader.GetString(0));
  }    
}
0 голосов
/ 23 апреля 2019

Вы можете использовать эту функцию для анализа значения [1,2,3,4] из базы данных в Список

    private static List<int> ParseDbInt(string databaseValue)
    {
        // Remove brackets
        var numStr = databaseValue.Replace("[", String.Empty);
        numStr     = numStr.Replace("]", String.Empty);

        // Now split that string into a string array using String.Split
        var numbers = numStr.Split(new char[] { ',' });

        // Split the comma-seperated numbers into a List using LINQ "Select" keyword
        return new List<int>(numbers.Select(s => int.Parse(s)));
    }
0 голосов
/ 23 апреля 2019

вы можете использовать List<dynamic>.Вы можете вызывать все функции, которые можете, с помощью List<int>.Единственная проблема в том, что вы не сможете увидеть их из-за динамики, но это сработает.

...