首页 > 解决方案 > 从 xsd 生成 proto 文件

问题描述

我有一个 xsd 文件,我想从中生成 proto 文件。
首先,我使用xsd.exe从 xsd 文件生成 C# 类,现在我想生成 proto 文件。
我知道我必须使用string proto = Serializer.GetProto<MyType>(); ,但它似乎不起作用,因为自动生成的 C# 类没有用属性装饰。
有没有其他方法可以在不将这些属性添加到生成的代码中的情况下生成 proto 文件?

标签: c#xmlxsdprotobuf-net

解决方案


protobuf-net 可以使用用[DataContract]/修饰的类型[DataMember]只要[DataMember]s 包含合适的Order = n可选参数。从内存中,xsd 确实包含了这一点,Order从零开始,而 protobuf-net 想要从一开始(因为零不是 protobuf 中的有效标记)。最简单的解决方法是创建第二个单独的文件以在 中添加补丁partial class

namespace TheSameNamespace {
    [ProtoContract(DataMemberOffset = 1)]
    partial class TheSameClass {}
}

这告诉 protobuf-net 向所有[DataMember(Order = n)]标记添加一个。在那之后:它应该工作。


推荐阅读