反序列化 JSON 以常量折叠方式映射 C#
Deserialize JSON Map in a constant-foldable way C#
我需要将 映射的字符串表示形式传递到我的 U-SQL 程序中,并将其反序列化为 C# Dictionary 以便我可以将其转换为一个U-SQL SqlMap。我需要以 constant-foldable 的方式进行。我最近的尝试:
DECLARE @MapStr string = "{\"key\": \"val\"}";
DECLARE CONST @map = new SqlMap<string,string>(JsonConvert.DeserializeObject<Dictionary<string, string>>(@MapStr));
失败并显示“E_CSC_USER_EXPRESSIONNOTCONSTANTFOLDABLE:表达式不能常量折叠。”
我发现了多种将字符串反序列化为映射的方法,但 none 到目前为止都是可折叠的。我找不到常量可折叠 C# 表达式的列表,这在这里也很有用。
来自docs:
... can be computed at compile time (so called constant-foldable expressions)
在 C# 中常量是 defined as:
immutable values which are known at compile time and do not change for the life of the program. Constants are declared with the const modifier. Only the C# built-in types (excluding System.Object) may be declared as const. User-defined types, including classes, structs, and arrays, cannot be const.
看来你只能使用C#中可以定义为常量的东西,所以你只能使用built-in类型的表达式(不包括System.Object
)。
如果有人好奇,我相信这是不可能的:
- 只有字符串和内置类型表达式是常量可折叠的,不包括对象(例如数组和映射)。 (有关此链接,请参阅其他答案)
- 没有计算为 SqlMap 的内置表达式或字符串表达式
- 因此不存在求值为 SqlMap 的常量可折叠表达式
为了我的特定目的,我能够使用一个创建 CONST SqlMaps 的配置文件并使用它,但如果我们有超过一组有限的可能输入,那将是不可能的。
我需要将
DECLARE @MapStr string = "{\"key\": \"val\"}";
DECLARE CONST @map = new SqlMap<string,string>(JsonConvert.DeserializeObject<Dictionary<string, string>>(@MapStr));
失败并显示“E_CSC_USER_EXPRESSIONNOTCONSTANTFOLDABLE:表达式不能常量折叠。”
我发现了多种将字符串反序列化为映射的方法,但 none 到目前为止都是可折叠的。我找不到常量可折叠 C# 表达式的列表,这在这里也很有用。
来自docs:
... can be computed at compile time (so called constant-foldable expressions)
在 C# 中常量是 defined as:
immutable values which are known at compile time and do not change for the life of the program. Constants are declared with the const modifier. Only the C# built-in types (excluding System.Object) may be declared as const. User-defined types, including classes, structs, and arrays, cannot be const.
看来你只能使用C#中可以定义为常量的东西,所以你只能使用built-in类型的表达式(不包括System.Object
)。
如果有人好奇,我相信这是不可能的:
- 只有字符串和内置类型表达式是常量可折叠的,不包括对象(例如数组和映射)。 (有关此链接,请参阅其他答案)
- 没有计算为 SqlMap 的内置表达式或字符串表达式
- 因此不存在求值为 SqlMap 的常量可折叠表达式
为了我的特定目的,我能够使用一个创建 CONST SqlMaps 的配置文件并使用它,但如果我们有超过一组有限的可能输入,那将是不可能的。