我有一个带有 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; }
}
或者,您也可以将转换器的实例作为参数传递给 SerializeObject
或DeserializeObject
:
string json = JsonConvert.SerializeObject(myClass, new SqlHierarchyIdConverter());
这是一个往返演示:https://dotnetfiddle.net/7h7E82
关于c# - 如何将 SqlHierarchyId 序列化为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52740482/