1

属性を持つクラスを使用してDataContractSerializer、またはDataContractJsonSerializerクラスでシリアル化が失敗するのはなぜですか?Serializable

例外:「System.Runtime.Serialization.Json.DataContractJsonSerializer」はシリアル化できません。DataContractAttribute属性でマークし、シリアル化するすべてのメンバーをDataMemberAttribute属性でマークすることを検討してください。タイプがコレクションの場合は、でマークすることを検討してください。 CollectionDataContractAttribute "

DataContractSerializerDataContractsは/属性でうまく機能しますが、失敗するクラスに属性DataMemberがある場合を除いて、それらの属性のないクラスでも機能しSerializable、上記の例外を生成します。

4

2 に答える 2

1

[Serializable]をPOCOクラスに入れる必要はないと思います。オブジェクトをクラスに配置しなくても、オブジェクトは自動的にシリアル化されます。

于 2013-02-06T09:50:34.800 に答える
1

この問題を解決しました。クラスにSystem.Runtime.Serialization.Json.DataContractJsonSerializerを返すプライベートプロパティSerializerがあります。

    private XmlObjectSerializer Serializer
    {
        get
        {
            _serializer = _serializer ?? GetSerializer(GetType());
            return _serializer;
        }
    }

プライベートですが、DataContractJsonSerializerはシリアル化に含めます。そのプロパティだけでなく、プライベートフィールドとしても。これは、DataContract属性とDataMember属性を指定しない場合の動作です。

于 2013-02-06T10:53:14.173 に答える