9

protobuf-net に出会いました。空のリストのシリアル化について質問があります。

シリアル化するオブジェクトを宣言することから始めます。

[ProtoContract]
class TestClass
{
    [ProtoMember(1)]
    List<int> _listOfInts = new List<int>();

    public TestClass() { }

    public List<int> ListOfInts
    {
        get { return _listOfInts; }
        set { _listOfInts = value; }
    }
}

_listOfInts が空 (null ではない) の場合、このオブジェクトは常に null になります。これは protobuf 規則を見ると理にかなっています。私は現在、次のメソッドを追加することでこれを回避しています。

[ProtoAfterDeserialization]
private void OnDeserialize()
{
    if (_listOfInts == null)
        _listOfInts = new List<int>();
}

私の質問は、null/空のオブジェクトをnullではなく空として初期化する追加の属性を使用して、これと同じ機能をより簡潔な方法で実現できるかどうかです?

4

2 に答える 2

5

null リストから保護しようとしている場合は、プロパティ ゲッターで遅延読み込みを試すことができます。

public List<int> ListOfInts
{
    get { return _listOfInts ?? (_listOfInts = new List<int>()); }
    set { _listOfInts = value; }
}

このようにして、シリアライザーが null を返すことを許可できます。

于 2013-05-05T21:30:40.053 に答える