2

私がこのC#辞書を持っているとしましょう:

Dictionary<string, object> Parameters { get; set; }

それから私はいくつかの値を中に入れます

Parameters["param1"] = "val1";
Parameters["param2"] = "val2";

そして最後に私はそれをシリアル化します

var serializer = new JsonSerializer();
var stringWriter = new StringWriter();
var writer = new JsonTextWriter(stringWriter);
writer.QuoteName = false;
writer.QuoteChar = '\'';
serializer.Serialize(writer, Parameters);

(もっと速い方法があることは知っていますが、引用符で囲まれた文字を一重引用符で引用符で囲まれていない名前にする必要があります)。

結果は期待どおりです。

{ 
   param1: 'val1', 
   param2: 'val2' 
}

しかし、関数またはオブジェクト名を表す可能性のある引用符で囲まれていない値を持つプロパティを含めたい場合はどうなりますか?たとえば、この結果を取得するにはどうすればよいですか。

{ 
   param1: 'val1', 
   param2: 'val2',
   funcReference: someFunctionName,
   objName: valueWithoutQuotes
}

編集:

JSON構文に関するいくつかの応答が無効であるため、引用符で囲まないようにする必要がある理由を明確にしましょう。

JavascriptとHTMLデータバインディングにKnockoutjsを使用しています。したがって、私はこのようなものを書く必要があります- <div data-bind="something: 'value', event: funcName">...</div>

HTMLを混乱させないように一重引用符が必要です。また、非常に一般的でJavascriptでは完全に問題のない個人的なスタイルのためにプロパティ名を引用しません(データ交換には使用していません)。

Knockoutが関数への参照であることを認識できるように、引用符で囲まれていない値が必要です。そうでない場合は、文字列として扱われます。また、サーバー上で生成している関数の名前、およびその他のプロパティと値。

もちろん、いつでも手動でJSONをビルドして連結することができますが、自動化された方法を探しています。

ありがとう!

4

2 に答える 2

2

(もっと速い方法があることは知っていますが、引用符で囲まれた文字を一重引用符と引用符で囲まれていない名前にする必要があります

申し訳ありませんが、これは有効なJSONではありません。JSONでは、すべてのメンバーを二重引用符で囲む必要があり(数値型を除く)、関数を使用することはできません。.NETには、無効なJSONを生成するJSONシリアライザーはありません。無効なJSONを生成する必要がある場合は、文字列の連結を使用して手動で生成する必要があります。シリアライザーを使用しようとしないでください。

有効なJSONエンコードされたオブジェクトの文法は次のとおりです。あなたはそれに固執する必要があります。JSONには、尊重する必要のある非常に具体的なルールがあるため、JavaScript構文にJSONという用語を使用しないでください。

于 2012-09-24T07:33:53.990 に答える
0

上記の私のコメントに追加すると、理想的には

{  
   "param1": "val1",  
   "param2": "val2", 
   "funcReference": "someFunctionName", 
   "objName": "valueWithoutQuotes" 
} 

コメントにコードを投稿できなかったため、回答として投稿

于 2012-09-24T07:37:52.067 に答える