读取 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));
}
}
我正在尝试 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));
}
}