2

デリゲートtools[]なしで配列の一部のみをシリアル化および逆シリアル化する方法を誰か教えてください。Func

    public class Tool
    {
        public Tool()
        {
            lastUse = 1;
            running = false;
        }
        public Func<int> action;
        public bool running;
        public int lastUse;
    }
    public static Tool[] tools = new Tool[] { new Tool(), new Tool(), new Tool(),new Tool()};

ご回答ありがとうございます。

4

1 に答える 1

4

できることの 1 つは、DataContract属性とDataMember属性を利用して、必要なデータのみをシリアル化することです。

[DataContract]
public class Tool
{
    public Tool()
    {
        lastUse = 1;
        running = false;
    }

    public Func<int> action;

    [DataMember]
    public bool running;

    [DataMember]
    public int lastUse;
}

属性なしの結果:

[{"action":null,"running":false,"lastUse":1},{"action":null,"running":false,"lastUse":1},{"action":null,"running":false,"lastUse":1},{"action":null,"running":false,"lastUse":1}]

属性を使用:

[{"running":false,"lastUse":1},{"running":false,"lastUse":1},{"running":false,"lastUse":1},{"running":false,"lastUse":1}]

これはJson.NETDataContractJsonSerializeの両方で機能します。

このアプローチで私が気に入っているのは、標準の C# プロパティの命名規則を維持しながら、「正しく大文字と小文字を区別した」JSON を出力できることです。

[DataMember(Name="last_use")]
public int LastUse { get; set; }

出力します

{"last_use": 1}
于 2012-12-27T18:51:55.113 に答える