我试图从表中包含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。
谢谢,
使用像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));
}
}
你可以使用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)));
}