この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 33737|答える: 2

[出典] Newtonsoft.JsonはDataContract機能を無視します

[リンクをコピー]
掲載地 2018/05/30 16:50:17 | | | |
Newtonsoft.Jsonご存知の通り、よく使われるJSONのシリアライズおよびデシリアライゼーションツール

DataContractAttributeDataContractSerializerのようなシリアライザーでシリアライズ可能なデータ契約を定義または実装するために、その型を指定します。 型をシリアライズ可能にするには、型の作成者はその型に対してデータ契約を定義しなければなりません。

困難な問題に直面した。親クラスは[DataContract]の機能を持ち、子クラスは親クラスを継承し、サブクラスのすべての属性は[DataMember]属性でシリアライズおよびデシリアライズする必要があります親クラスは他人のカプセル化されたdllなので、親クラスの[DataContract]機能は削除できません!

テストの内容は以下の通りです:Test1クラスには[DataContract]機能があり、属性に[DataMember]機能が追加されていない場合、下図のようにシリアライズおよびデシリアライズが失敗します。




私たちはクラスTest1の[DataContract]特徴に注釈を付けたところ、通常通りシリアライズおよびデシリアライズが可能であることがわかりました。



Newtonsoft.Jsonの高度な使い方でこの機能を無視できるものはありますか? 答えはイエスです!

Json.NetのOptOutプロパティを使いましょう。 DataContractよりも優先されます。

//
        概要:
        すべての公開メンバーはデフォルトでシリアル化されています。 メンバーはNewtonsoft.Json.JsonIgnoreAttributeを使って除外できます。
        またはSystem.NonSerializedAttribute。 これがデフォルトのメンバーシリアライゼーションパターンです。
        オプトアウト = 0,
        //
        概要:
        Newtonsoft.Json.JsonPropertyAttribute または System.Runtime.Serialization.DataMemberAttribute とラベル付けされたメンバーのみ
        連載されています。 このメンバーシリアライゼーションモードはタグ付けによっても設定可能です
        System.Runtime.Serialization.DataContractAttribute を持つクラスです。
        OptIn = 1,
        //
        概要:
        すべての公的および私的フィールドは連続掲載されています。 メンバーはNewtonsoft.Json.JsonIgnoreAttributeを使って除外できます。
        またはSystem.NonSerializedAttribute。 このメンバーのシリアライゼーションパターンも問題ありません
        クラスにSystem.SerializableAttributeをタグ付けし、IgnoreSerializableAttributeを設定して設定します
        Newtonsoft.Json.Serialization.DefaultContractResolverをfalseに設定してください。
        場 = 2


テストコード:







先の:AppDomainsを監視する
次に:. .NETで最も高速なOOMオブジェクトマッピングコンポーネント、Tiny Mapper(プロジェクト運用)
掲載地 2018/06/01 13:20:10 |
json文字列がオブジェクトか配列かを判別します
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

switch (s.Type.ToString())
                {
                    ケース「オブジェクト」:
                        休憩;
                    ケース「Array」:
                        休憩;
                    デフォルト:
                        休憩;
                }
掲載地 2020/08/21 11:52:32 |
大家さんのサポートは、太ももを求めるのが得意です
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com