.net 如何在C#中使用协议缓冲区序列化NetTopologySuite类(如Polygon)?

ewm0tg9j  于 2023-06-07  发布在  .NET
关注(0)|答案(1)|浏览(512)

我是新来的协议缓冲区。我想使用protobuf-net nuget来序列化/反序列化我的City类。Polygon是NetTopologySuite nuget的一个类型。

[ProtoContract]
public class City
{
    [ProtoMember(1)]
    public Guid Id { get; set; }

    [ProtoMember(2)]
    public string Name { get; set; }

    [ProtoMember(3)]
    public int Population { get; set; }

    [ProtoMember(4)]
    public Polygon Area { get; set; } 
}

当然,它不能序列化属性Area。你有什么建议,我可以提供一些自定义序列化面积或可能有另一种方式来序列化城市类?通过使用谷歌.Protobuf nuget?

oug3syen

oug3syen1#

如果您使用的是protobuf.net,您可以使用代理:

var typeModel = RuntimeTypeModel.Create();
typeModel.Add(typeof(Polygon ), false).SetSurrogate(typeof(PolygonSurrogate));

...

[ProtoContract]
class PolygonSurrogate
{
   // Members

    public PolygonSurrogate(...){ ... }

    public static implicit operator Polygon (PolygonSurrogate dto) => new(...);
    public static implicit operator PolygonSurrogate(Polygon model) => new(...);
}

然后,无论何时进行序列化/反序列化,都需要使用该类型模型。您需要编写一些代码来执行netTopologySuite和代理类之间的实际转换。
对于更简单的类型,您可以只指定要序列化的属性,但我猜Polygon对于这种方法来说太复杂了。
但我会考虑直接在City类中将类型转换为protobuf兼容类型。这可能比使用定义转换的类型模型更容易阅读和理解。

相关问题