c# - 如何将 SqlHierarchyId 序列化为字符串

标签 c# json

我有一个带有 SqlHierarchyId 字段类型的表。

默认的 JSON 序列化返回一个如下所示的 JavaScript 对象:{isNull: false},而不是像这样的字符串 /1/

有什么方法可以正确设置序列化吗?

public class MyClass
{
    [SerializeToString]
    public SqlHierarchyId NodeId { get; set; }
}

最佳答案

根据 MSDN 文档,SqlHierarchyId实现 ToString()方法和静态 Parse()方法以方便将其转换为规范字符串表示形式并返回。因此,假设您正在使用 Json.Net对于序列化,您应该能够制作一个简单的 JsonConverter类来弥补差距。它看起来像这样:

public class SqlHierarchyIdConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return (objectType == typeof(SqlHierarchyId));
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        string id = (string)reader.Value;
        return (id == null || id == SqlHierarchyId.Null.ToString()) ? SqlHierarchyId.Null : SqlHierarchyId.Parse(id);
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(value.ToString());
    }
}

要使用它,您可以使用 [JsonConverter] 属性标记类中的 SqlHierarchyId 属性,如下所示:

class MyClass
{
    [JsonConverter(typeof(SqlHierarchyIdConverter))]
    public SqlHierarchyId NodeId { get; set; }
}

或者,您也可以将转换器的实例作为参数传递给 SerializeObjectDeserializeObject :

string json = JsonConvert.SerializeObject(myClass, new SqlHierarchyIdConverter());

这是一个往返演示:https://dotnetfiddle.net/7h7E82

关于c# - 如何将 SqlHierarchyId 序列化为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52740482/

相关文章:

sql - 如何使用 Postgres 聚合 JSON 对象数组?

objective-c - 访问未知字典键的值

python - 无法将 geodjango 模型数据序列化为 json 以传回网站

c# - Mathf.PingPong 速度问题?

c# - 结束连接异常

c# - 将 git 上的所有提交返回到尚未 merge 的主分支的最简单方法是什么?

arrays - 使用 Newtonsoft Json.NET 循环使用动态对象 ID 的非数组 JSON

php - 编码 PHP MySQL 对 JSON 问题的查询响应

c# - 如何在不序列化的情况下 Redis 缓存大型 C# 对象?

c# - 将依赖项注入(inject) .net 核心中的自动映射器配置文件 - IHttpContextAccessor 返回 null