【发布时间】:2021-04-24 05:59:14
【问题描述】:
我有几列包含 JSON 数据。这些特定的列是一个枚举数组。
查询MembershipType 表时,序列化和反序列化运行良好,符合预期。但是,我有一个嵌套 MembershipTypes 数组的 SQL 视图,这样做会导致 EF Core 引发类似于以下的错误:
System.Exception:“将值 \"[\"Certified\"]\" 转换为类型 'DataLayer.Models.Members.MembershipTypeCategory[]' 时出错。路径 '[0].History.MembershipType.Categories',行1,位置 585。”
您可以看到添加到该值的所有额外引号和反斜杠。我已经尝试用字符串替换引号和反斜杠,这很有效,但这可能会对其他字符串数据产生不良影响。
有什么想法吗?
代码如下: SQL 视图
SELECT
hist.*
, (
select * from Member.MembershipTypes
where id = hist.MembershipTypeId and Deleted = 0
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
) as MembershipType
...
枚举
public enum MembershipTypeCategory
{
Type1,
Type2,
Type3
}
以及它所在的班级:
[Table("MembershipTypes", Schema = "Member")]
public class MembershipType : EntityBase, IMembershipTypeDto
{
...
[NotMapped]
public MembershipTypeCategory[] Categories { get; set; }
...
}
在模型构建器中我有:
var settings = new JsonSerializerSettings
{
ContractResolver = new IgnoreVirtualResolver(),
PreserveReferencesHandling = PreserveReferencesHandling.None,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
TypeNameHandling = TypeNameHandling.All,
Formatting = Formatting.None,
Error = HandleDeserializationError
};
modelBuilder.Entity<MembershipType>()
.Property(x => x.Categories)
.HasConversion(
v => JsonConvert.SerializeObject(v, Formatting.None, settings),
v => JsonConvert.DeserializeObject<MembershipTypeCategory[]>(v, settings)
);
return modelBuilder;
【问题讨论】:
标签: c# .net sql-server entity-framework