gpt4 book ai didi

c# - 如何在不创建对象的情况下使用 C# 序列化 Guid?

转载 作者:行者123 更新时间:2023-11-30 17:35:27 25 4
gpt4 key购买 nike

我希望将我的 Guid 序列化为简短形式的 Guid ( as seen here )。为了完全兼容,我希望 ShortGuid 类序列化为短格式,而不是长格式。

我试过了 using custom serialization ,但我似乎无法将整个对象序列化为短字符串,只能序列化为包含该字符串的对象。这是我试过的:

[Serializable]
public class ShortGuid : ISerializable
{
public Guid Guid { get; }
protected ShortGuid(SerializationInfo info, StreamingContext context)
{
Guid = Decode(info.GetString("Guid"));
}

public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("Guid", Encode(Guid));
}
}

哪个有效,但如果我序列化它:

var guid = new ShortGuid(Guid.NewGuid());
var str = JsonConvert.Serialize(guid);

我得到的序列化字符串如下所示:

{ Guid: "xxxxxxxxxxxxxxxxxx" }

虽然我想要的序列化字符串只是

xxxxxxxxxxxxxxxxxx

我已经扭转了一切,但无法让它发挥作用。如何做到这一点?

注意:我不希望它只适用于 JsonConvert,这只是一个示例。我希望该类始终正确序列化。

最佳答案

这非常适合我:

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

关于c# - 如何在不创建对象的情况下使用 C# 序列化 Guid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41162926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com