亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Protobuf-Net NotSupportedException:

Protobuf-Net NotSupportedException:

C#
哈士奇WWW 2021-07-05 15:14:07
根據如何使用 protobuf-net和Protobuf-net 和 Unity3D 類型序列化封閉的不可變類型的答案,我嘗試實現一個可以處理 UnityEngine 的 Vector3 容器的序列化程序,其中唯一重要的值是 Vector3.x、Vector3。 y 和 Vector3.z:使用以下類型模型:serializer = TypeModel.Create();serializer.UseImplicitZeroDefaults = false;然后我分別嘗試了兩種不同的方法,為 Vector3 添加協議定義;明確的定義: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);    }}使用任一方法嘗試序列化 a 時Dictionary<int, Vector3>,會引發以下異常:NotSupportedException: Type cannot be represented as a default value: UnityEngine.Vector3ProtoBuf.Serializers.DefaultValueDecorator.EmitBranchIfDefaultValue (ProtoBuf.Compiler.CompilerContext ctx, ProtoBuf.Compiler.CodeLabel label) (at <5e93d5bf6f2048709aab19aea88deb74>:0)...我不確定如何修改我的 Typemodel 或協議定義以成功序列化 UnityEngine.Vector3 的集合。
查看完整描述

1 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

這可能是“地圖”代碼中的一個錯誤,需要修復。您現在可以通過添加以下內容來避免它:

[ProtoMap(DisableMap = true)]

到作為字典的屬性/字段?!暗貓D”代碼和原始“地圖”代碼之間的區別很微妙而且不是很有趣——它主要改變了重復情況下發生的事情——但是:“地圖”中似乎有一個惱人的錯誤邏輯,這可能不存在于原始代碼路徑中。但是,“地圖”路徑現在是默認路徑,因此禁用它的解決方法。


查看完整回答
反對 回復 2021-07-17
  • 1 回答
  • 0 關注
  • 268 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號