读取MySQL JSON数据类型并将其强制转换为List 在C#中

问题描述 投票:0回答:3

我试图从表中包含JSON数据类型的mysql数据库返回一个数字列表。

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

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

更具体地说,这就是我从mysql读者那里得到的

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

我想把它投入

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

因此,如果有一种方法可以直接以JSON格式从数据库中读取JSON数据类型,那将非常棒。

或者我正在寻找一种方法来解析字符串列表并将其转换为c#native list。

谢谢,

c# mysql json list varchar
3个回答
2
投票

使用像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,它不“认为”它们是文本:

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

-1
投票

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


-1
投票

您可以使用此函数将数据库中的[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)));
    }
© www.soinside.com 2019 - 2024. All rights reserved.