Json.Net は、シリアル化プロセスをカスタマイズするための JsonProperty プロパティを提供し、開発者がシリアル化中にプロパティ名を指定できるようにします。ただし、場合によっては (クライアントがブラウザーである場合など)、負荷を軽減するために短いプロパティ名を使用すると、クライアント コードで短い名前を使用すると問題が発生する可能性があります。
この問題を回避するには、カスタム コントラクト パーサーを使用して、JsonProperty プロパティを選択的に無視します。その方法は次のとおりです:
<code class="language-csharp">public class LongNameContractResolver : DefaultContractResolver { protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) { // 使用简短名称获取默认属性 IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization); // 将简短名称替换为原始属性名称 foreach (var property in properties) { property.PropertyName = property.UnderlyingName; } return properties; } }</code>
このパーサーは CreateProperties メソッドをオーバーライドします。このメソッドは、まず JsonProperty プロパティで指定された短い名前を使用してプロパティのリストを作成します。次に、各プロパティをループし、短い名前を基になるプロパティ名に置き換えます。
このパーサーを使用するには、JsonSerializerSettings のコントラクト パーサーとして設定します。
<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings(); settings.ContractResolver = new LongNameContractResolver();</code>
カスタム設定を使用してシリアル化するときに、JsonProperty プロパティを選択的に無視できます。
<code class="language-csharp">// 如果 useLongNames 为 true,则忽略 JsonProperty 属性 if (useLongNames) { settings.ContractResolver = new LongNameContractResolver(); }</code>
このソリューションを使用すると、JsonProperty プロパティが無視されるタイミングをプログラムで制御できるため、クライアントの種類や特定の条件に基づいて必要なシリアル化動作を取得できます。
以上がJSON シリアル化中に JsonProperty 属性を選択的に無視するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。