读取 MySQL JSON 数据类型并将其转换为 C# 中的 List<Int>

Read MySQL JSON datatype and cast it into List<Int> in C#

我正在尝试 return 来自 mysql 数据库的数字列表,该数据库在 table 中具有 JSON 数据类型。

c# 中的 mysql.connector 认为数据类型是 VARCHAR 所以基本上我从数据库中得到 return "[1, 2, 3]"。

我需要将字符串 return 转换为 List<INT> 以便我可以直接使用它。

更具体地说,这就是我从 mysql reader

中得到的
string mylist = "[1, 2, 3]"

我想把它转换成

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

因此,如果有一种方法可以直接从数据库中以 JSON 格式读取 JSON 数据类型,那就太好了。

或者,我正在寻找一种方法来解析字符串列表并将其转换为 C# 原生列表。

谢谢,

你可以使用 List<dynamic>。您可以使用 List<int> 调用您可以调用的所有函数。唯一的问题是,由于是动态的,您将看不到它们,但它会起作用。

您可以使用此函数将数据库中的[1,2,3,4]值解析成List

    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)));
    }

使用像 JSON.NET 这样的 JSON 解析器来解析 JSON 字符串,例如:

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

var jsonArray=JArray.Parse(json);

MySQL 连接器 explicitly treats JSON as a string,它不是 "think" 它们是文本 :

    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);

图书馆自己的 tests use GetString() to read JSON data :

[Fact]
public void CanReadJsonValue()
{
  ...
  using (MySqlDataReader reader = cmd.ExecuteReader())
  {
    Assert.True(reader.Read());
    Assert.Equal("[\"a\", {\"b\": [true, false]}, [10, 20]]", reader.GetString(0));
  }    
}