Serialize/deserialize 一个以逗号分隔条目的字典
Serialize/deserialize a Dictionary with a comma-separated entry
我正在开发一个 ASP.NET Core 3.1 网站,我在 Dictionary 中有数据,我想 Serialize/Deserialize 使用 Microsoft System.Text.Json(实际上我是 Json serialize/deserialize 的新手)。数据来自 PostgreSQL 数据库查询,其中一个返回值是 STRING_AGG 函数生成的以逗号分隔的整数列表(转换为字符串)。下图显示了词典的条目之一:
我使用以下代码对其进行序列化。请注意,我已经尝试了 Microsoft System.Text.Json 和 Newtonsoft.
jsonResult = Newtonsoft.Json.JsonConvert.SerializeObject(result);
//jsonResult = JsonSerializer.Serialize(result);
字典中的数据应根据以下class结构反序列化:
我使用以下代码:
//IEnumerable<SeccGralContenidoViewModel> seccGralContenido = JsonSerializer.Deserialize<IEnumerable<SeccGralContenidoViewModel>>(_seccGralContenidoRepository.Read());
IEnumerable<SeccGralContenidoViewModel> seccGralContenido = Newtonsoft.Json.JsonConvert.DeserializeObject <IEnumerable<SeccGralContenidoViewModel>>(_seccGralContenidoRepository.Read());
但是无论我用Newtonsoft还是System.Text.Json:[=16=反序列化都会抛出异常]
我最初使用 System.Text.Json 命名空间,但我也尝试使用 Newtonsoft。经过更深入的分析,我发现问题可能出在数据保存到 Dictionary 的方式上,但我还没有找到解决方法。
如果您不想编写自定义转换器,那么最简单的解决方案是引入另一个 属性:
public string CategoriasContenidolds {get; set;}
private static char delimiter = ',';
[JsonIgnore]
public string[] CategoriasContenidolds_Collection
{
get => CategoriasContenidolds.Split(delimiter).Select(item => item.Trim()).ToArray();
set => CategoriasContenidolds = string.Join(delimiter, value);
}
- 序列化程序将在序列化和反序列化期间使用
CategoriasContenidolds
属性
- 您应该在业务逻辑中使用
CategoriasContenidolds_Collection
(或任意命名)
- 通过使用
JsonIgnore
显式标记此 属性,序列化程序将忽略
我可以通过直接从查询中获取 JSON 格式的结果来解决我的问题。 PostgreSQL 做得很好。这样我也避免了执行两步过程:首先,获取查询结果;其次,序列化为 JSON.
我正在开发一个 ASP.NET Core 3.1 网站,我在 Dictionary
我使用以下代码对其进行序列化。请注意,我已经尝试了 Microsoft System.Text.Json 和 Newtonsoft.
jsonResult = Newtonsoft.Json.JsonConvert.SerializeObject(result);
//jsonResult = JsonSerializer.Serialize(result);
字典中的数据应根据以下class结构反序列化:
我使用以下代码:
//IEnumerable<SeccGralContenidoViewModel> seccGralContenido = JsonSerializer.Deserialize<IEnumerable<SeccGralContenidoViewModel>>(_seccGralContenidoRepository.Read());
IEnumerable<SeccGralContenidoViewModel> seccGralContenido = Newtonsoft.Json.JsonConvert.DeserializeObject <IEnumerable<SeccGralContenidoViewModel>>(_seccGralContenidoRepository.Read());
但是无论我用Newtonsoft还是System.Text.Json:[=16=反序列化都会抛出异常]
我最初使用 System.Text.Json 命名空间,但我也尝试使用 Newtonsoft。经过更深入的分析,我发现问题可能出在数据保存到 Dictionary 的方式上,但我还没有找到解决方法。
如果您不想编写自定义转换器,那么最简单的解决方案是引入另一个 属性:
public string CategoriasContenidolds {get; set;}
private static char delimiter = ',';
[JsonIgnore]
public string[] CategoriasContenidolds_Collection
{
get => CategoriasContenidolds.Split(delimiter).Select(item => item.Trim()).ToArray();
set => CategoriasContenidolds = string.Join(delimiter, value);
}
- 序列化程序将在序列化和反序列化期间使用
CategoriasContenidolds
属性 - 您应该在业务逻辑中使用
CategoriasContenidolds_Collection
(或任意命名)- 通过使用
JsonIgnore
显式标记此 属性,序列化程序将忽略
- 通过使用
我可以通过直接从查询中获取 JSON 格式的结果来解决我的问题。 PostgreSQL 做得很好。这样我也避免了执行两步过程:首先,获取查询结果;其次,序列化为 JSON.