[解決済み] .NETでjsonのキーが小文字であることを確認する
2022-10-08 05:42:39
質問
.NETでJSONを使用して、キーが小文字で送信されることを保証する簡単な方法はありますか?
今のところ、私はnewtonsoftのJson.NETライブラリを使用しており、単に
string loginRequest = JsonConvert.SerializeObject(auth);
この場合
auth
は単に次のオブジェクトです。
public class Authority
{
public string Username { get; set; }
public string ApiToken { get; set; }
}
この結果
{"Username":"Mark","ApiToken":"xyzABC1234"}
を確実にする方法はありますか?
username
と
apitoken
のキーは小文字で表示されますか?
単純に
String.ToLower()
の値は
username
と
apitoken
は大文字と小文字が混在しています。
私はこれをプログラム的に行い、JSON文字列を手動で作成できることに気づきましたが、私は約20のJSONデータ文字列にこれを必要とし、私はいくつかの時間を節約することができるかどうかを見ています。キー作成に小文字を強制することができる、すでに構築されたライブラリがあるかどうか疑問に思っています。
どのように解決するのですか?
カスタムのコントラクトリゾルバを作成することができます。以下のコントラクトリゾルバーは、すべてのキーを小文字に変換します。
public class LowercaseContractResolver : DefaultContractResolver
{
protected override string ResolvePropertyName(string propertyName)
{
return propertyName.ToLower();
}
}
使用方法
var settings = new JsonSerializerSettings();
settings.ContractResolver = new LowercaseContractResolver();
var json = JsonConvert.SerializeObject(authority, Formatting.Indented, settings);
でウィル結果。
{"username":"Mark","apitoken":"xyzABC1234"}
常にシリアライズを行う場合は
LowercaseContractResolver
を使用してシリアライズする場合、繰り返しを避けるためにクラスでそれをラップすることを検討してください。
public class LowercaseJsonSerializer
{
private static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
ContractResolver = new LowercaseContractResolver()
};
public static string SerializeObject(object o)
{
return JsonConvert.SerializeObject(o, Formatting.Indented, Settings);
}
public class LowercaseContractResolver : DefaultContractResolver
{
protected override string ResolvePropertyName(string propertyName)
{
return propertyName.ToLower();
}
}
}
は、このように使うことができます。
var json = LowercaseJsonSerializer.SerializeObject(new { Foo = "bar" });
// { "foo": "bar" }
ASP.NET MVC4 / ウェブAPI
ASP.NET MVC4 / WebAPI を使用している場合、ASP.NET MVC4 / WebAPI で使用するために必要な
CamelCasePropertyNamesContractResolver
がデフォルトで含まれているNewtonsoft.Jsonライブラリから取得できます。
関連
-
[解決済み] C++/CLIにおけるキャレット('^')の意味は?
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] .NETでC#オブジェクトをJSON文字列に変換するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] VB.NETでプログラムパスを取得する?
-
[解決済み] Marginのプロパティ順
-
[解決済み] Html.BeginForm()にCSSクラスを追加する。
-
[解決済み] WPFで角丸ボタンを作成する/作るには?
-
[解決済み] AndroidでWCFサービスを利用する方法
-
[解決済み] AssemblyInfo.csは何に使うのですか?
-
[解決済み] DelphiとDelphi.NETの違いについて
-
[解決済み] パッケージのダウングレード警告を検出(dotnet core, vs 2017)
-
[解決済み] Visual Studioの「Any CPU」ターゲットはどういう意味ですか?
-
[解決済み] WPFのStaticResourceとDynamicResourceの違いは何ですか?