使用 protobuf-net 序列化數組時如何處理空值?
以下語句失敗
NullReferenceException:TypeModel.Create().DeepClone(new string[1]);檢查原始碼會發現異常是故意拋出的,這意味著
null數組中的值違反了協議緩衝區規範(有意義,null不是任何值的重複)。好的,規範是正確的,但是如果集合中仍然存在空值,我們該怎麼辦?除了確保沒有任何
null價值進入我們的收藏品之外,是否有解決方案?謝謝。
這是一個棘手的問題。在網路級別,集合只是一個重複的標籤——每個元素代表一個對象。很簡單,沒有辦法在 protobuf 規範中直接表達 a 。
null現在,我可能會弄髒並為帶有空值的集合使用某種雙重標籤,但是 - 老實說,我認為使用看起來為空的非空對象通常會更好(如果你明白我的意思)。在字元串的情況下,也許
""會做(這取決於上下文,真的)。我也願意接受建議,但是……它需要牢記規範的限制。
看到這個:
http://code.google.com/p/protobuf-net/issues/detail?id=217
引用相關部分:
項目成員 marc.gravell 的評論 4,2011 年 12 月 14 日
我還沒有記錄該選項(它是作為特定請求添加的),但是 -目前你只能通過(例如)啟用它:
RuntimeTypeModel.Default[typeof (YourType)][3].SupportNull = true;其中 3 是欄位編號。
這也應該在屬性模型上可用……
請注意使用者“將”——我之前回答的刪除者——我知道這不是最好的地方,但我不知道有其他方式給你發消息,在這種情況下保持安靜是錯誤的:我很抱歉第一次回答“太短”,但是編輯不會比突然刪除更具建設性嗎?我提供的連結仍然沒有回答問題,評論也證明了這一點……我只是偶然發現你確實刪除了它。