gpt4 book ai didi

c# - Protobuf 网络 NotSupportedException : Type cannot be represented as a default value for closed immutable type (UnityEngine. Vector3)

转载 作者:太空宇宙 更新时间:2023-11-03 19:42:46 25 4
gpt4 key购买 nike

遵循 How to serialize a closed immutable type with protobuf-net 的答案和 Protobuf-net and Unity3D types ,我已经尝试实现一个可以处理 UnityEngine 的 Vector3 容器的序列化程序,其中唯一重要的值是 Vector3.x、Vector3.y 和 Vector3.z:

使用以下类型模型:

serializer = TypeModel.Create();
serializer.UseImplicitZeroDefaults = false;

然后我分别尝试了两种不同的方法来为 Vector3 添加协议(protocol)定义;一个明确的定义:

serializer.Add(typeof(Vector3), false).Add(1, "x").Add(2, "y").Add(3, "z");

并使用代理:

serializer.Add(typeof(Vector3), false).SetSurrogate(typeof(SurrogateVector3));

代理类:

[ProtoContract]
public sealed class SurrogateVector3
{
[ProtoMember(1)]
float x;
[ProtoMember(2)]
float y;
[ProtoMember(3)]
float z;

public SurrogateVector3()
{}

public SurrogateVector3(float x, float y, float z)
{
this.x = x;
this.y = y;
this.z = z;
}

public static implicit operator Vector3(SurrogateVector3 v)
{
return new Vector3(v.x, v.y, v.z);
}

public static implicit operator SurrogateVector3(Vector3 v)
{
return new SurrogateVector3(v.x, v.y, v.z);
}
}

当使用任一方法尝试序列化 Dictionary<int, Vector3> 时, 抛出以下异常:

NotSupportedException: Type cannot be represented as a default value: UnityEngine.Vector3
ProtoBuf.Serializers.DefaultValueDecorator.EmitBranchIfDefaultValue (ProtoBuf.Compiler.CompilerContext ctx, ProtoBuf.Compiler.CodeLabel label) (at <5e93d5bf6f2048709aab19aea88deb74>:0)
...

我不确定如何修改我的类型模型或协议(protocol)定义以成功序列化 UnityEngine.Vector3 的集合。

最佳答案

这可能是“ map ”代码中的错误,需要修复。您现在可以通过添加以下内容来避免它:

[ProtoMap(DisableMap = true)]

到作为字典的属性/字段。 “ map ”代码和原始“ map ”之前的代码之间的区别是微妙的,而且不是很有趣——它主要改变了重复情况下发生的事情——但是:“ map ”中似乎有一个恼人的错误逻辑,原始代码路径中可能不存在。但是,“ map ”路径现在是默认路径,因此需要禁用它。

关于c# - Protobuf 网络 NotSupportedException : Type cannot be represented as a default value for closed immutable type (UnityEngine. Vector3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50639757/

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