我有一个表,字段类型为SqlHierarchyId
。
默认的JSON序列化返回一个如下所示的javascript对象:{isNull: false}
而不是像这样的字符串/1/
有什么方法可以正确设置序列化吗?
public class MyClass
{
[SerializeToString]
public SqlHierarchyId NodeId { get; set; }
}
答案 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; }
}
或者,您也可以将转换器的实例作为参数传递给SerializeObject
或DeserializeObject
:
string json = JsonConvert.SerializeObject(myClass, new SqlHierarchyIdConverter());
这是一个往返演示:https://dotnetfiddle.net/7h7E82