最近、クラス内でjsonオブジェクト名の宣言に直面していましたが、次の方法で解決できました。
[JsonProperty("flv-270p")]
public string flv270p { get; set; }
では、JsonProperty なしで flv-270p を宣言したい場合、どうすればよいでしょうか?
お気に入り :
public string flv270-p { get; set; }
できません:
有効な名前は次のように定義されます。
identifier:
available-identifier
@ identifier-or-keyword
available-identifier:
An identifier-or-keyword that is not a keyword
identifier-or-keyword:
identifier-start-character identifier-part-charactersopt
identifier-start-character:
letter-character
_ (the underscore character U+005F)
identifier-part-characters:
identifier-part-character
identifier-part-characters identifier-part-character
identifier-part-character:
letter-character
decimal-digit-character
connecting-character
combining-character
formatting-character
letter-character:
A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nl
A unicode-escape-sequence representing a character of classes Lu, Ll, Lt, Lm, Lo, or Nl
combining-character:
A Unicode character of classes Mn or Mc
A unicode-escape-sequence representing a character of classes Mn or Mc
decimal-digit-character:
A Unicode character of the class Nd
A unicode-escape-sequence representing a character of the class Nd
connecting-character:
A Unicode character of the class Pc
A unicode-escape-sequence representing a character of the class Pc
formatting-character:
A Unicode character of the class Cf
A unicode-escape-sequence representing a character of the class Cf
ハイフンマイナスはクラスPdであるため、上記では許可されていません。
これは確かに、名前にクラスPdの何かを許可することが悪い考えである理由の1つです。
int x-y = 3;
int x = 10;
int y = 2;
int z = x-y; //3 or 8? Impossible to tell if the first line were allowed.
簡単な答え: できません。
.NET は、CIL 言語で違法なものを含め、任意のメンバー名をサポートしています。ただし、言語がサポートしていない場合は使用できません。これにはハイフンとダッシュが含まれます。このため、C# の自動プロパティ<
とその非表示のバッキング フィールド名が使用されます。>
C# では、キーワードにプレフィックス@
としてシンボルを付けて、変数またはメンバー名として使用できるようにすることができます (たとえばpublic int @class
、orpublic void @struct(int @interface)
ですが、これは消費者の利益のためです。
ただし、c# では、どのような状況でも名前にハイフンを使用することはできません。これは、その文字が単項否定およびバイナリ減算サブ演算子に使用されるためです。名前は「マイナス」flv270-p
と解釈されます。flv270
p
flv-270p
C#では有効な変数名ではありません。コードにそのようなものを入力すると、コンパイラは「flv270マイナスp」を実行しようとしていると見なします:)
他の答えは、なぜできないのかについての良い説明を与えますあなたが求めていることを正確に行います。そうは言っても、SEO 用に最適化された説明的な URL を作成する目的で、オブジェクト メタデータにハイフンを含めたいという状況に遭遇しました。質問で使用した属性アプローチは機能しますが、規則を使用して、属性なしでこの種のカスタマイズを示すこともできます。1 つの提案は、メンバー名を前処理して PascalCase を使用し、単語の間にハイフン区切り文字を挿入することです。これにより、メタデータが大幅に変更される可能性があります。もう 1 つのオプションは、C# 名で有効な文字であるアンダースコア '_' を使用し、前処理でアンダースコアをハイフンに置き換えることです。あなたの質問は、これがメタデータコンテキストでどのように実装/挿入されるかを示すために、ユースケースについて十分に語っていません.