如何将SqlHierarchyId序列化为字符串

时间:2018-10-10 12:38:32

标签: c# json

我有一个表,字段类型为SqlHierarchyId

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

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

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

1 个答案:

答案 0 :(得分:1)

根据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());
    }
}

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

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

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

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

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

相关问题