我希望将我的Guids序列化为简短的Guid(as seen here)。为了完全兼容,我希望ShortGuid类序列化为简短形式,而不是长形式。
我已经尝试了using custom serialization,但我似乎无法将整个对象序列化为短字符串,只能进入包含字符串的对象。这就是我尝试过的:
var guid = new ShortGuid(Guid.NewGuid());
var str = JsonConvert.Serialize(guid);
哪个有效,但如果我序列化它:
{ Guid: "xxxxxxxxxxxxxxxxxx" }
我得到的序列化字符串如下所示:
xxxxxxxxxxxxxxxxxx
虽然序列化字符串I WANT只是
GetRichTextBox()
我已经扭转了局面,但无法实现这一目标。怎么办呢?
注意:我不希望这只适用于JsonConvert,这只是一个例子。我希望这个类能够正确地序列化。
答案 0 :(得分:1)
这对我来说很完美:
public class GuidShortGuidConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Guid);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var shortGuid = new ShortGuid(reader.Value.ToString());
return shortGuid.Guid;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var customValue = new ShortGuid((Guid) value);
writer.WriteValue(customValue.ToString());
}
}
答案 1 :(得分:0)
你想要的不是序列化而是隐式转换。 序列化适用于结构化键/值基础,具体取决于序列化类型。
使用隐式字符串转换
public static implicit operator string(ShortGuid shortGuid)
{
return Encode(sh.Guid);
}
您可以使用
var guid = new ShortGuid(Guid.NewGuid());
string str = guid;