2

二重引用符を入力しようとしているコードがあります。私のコードは次のとおりです。

resulted_value = "{series_name : \"" + final_resulted_series_name + "\",period_name: \"" + period_name + "\",period_final_value: \"" + period_final_value + "\"}";

ここで結果 \ が毎回表示されます。「\"+variable+\"" と @"""variable""」 を使用しましたが、目的の出力が得られません..どんな助けでも大歓迎です。

------------------------EDIT 1-------------------- 次の出力を取得しています

["{series_name : \"Actual\",period_name:Q1 / 2013\",period_final_value:17\"}","\"{series_name : \\\"Actual\\\",period_name:Q1 / 2013\\\",period_final_value:17\\\"}\"","{series_name : \"Actual\",period_name:Q2 / 2013\",period_final_value:15\"}","\"{series_name : \\\"Actual\\\",period_name:Q2 / 2013\\\",period_final_value:15\\\"}\"","{series_name : \"Actual\",period_name:Q3 / 2013\",period_final_value:13\"}","\"{series_name : \\\"Actual\\\",period_name:Q3 / 2013\\\",period_final_value:13\\\"}\"","{series_name : \"Actual\",period_name:Q1 / 2013\",period_final_value:14.103\"}","\"{series_name : \\\"Actual\\\",period_name:Q1 / 2013\\\",period_final_value:14.103\\\"}\"","{series_name : \"Actual\",period_name:Q2 / 2013\",period_final_value:14.404499999999999\"}","\"{series_name : \\\"Actual\\\",period_name:Q2 / 2013\\\",period_final_value:14.404499999999999\\\"}\"","{series_name : \"Actual\",period_name:Q3 / 2013\",period_final_value:14.966999999999999\"}","\"{series_name : \\\"Actual\\\",period_name:Q3 / 2013\\\",period_final_value:14.966999999999999\\\"}\"","{series_name : \"Actual\",period_name:Q1 / 2013\",period_final_value:15.67\"}","\"{series_name : \\\"Actual\\\",period_name:Q1 / 2013\\\",period_final_value:15.67\\\"}\"","{series_name : \"Actual\",period_name:Q2 / 2013\",period_final_value:16.005\"}","\"{series_name : \\\"Actual\\\",period_name:Q2 / 2013\\\",period_final_value:16.005\\\"}\"","{series_name : \"Actual\",period_name:Q3 / 2013\",period_final_value:16.63\"}","\"{series_name : \\\"Actual\\\",period_name:Q3 / 2013\\\",period_final_value:16.63\\\"}\"","{series_name : \"Alarm\",period_name:Q1 / 2013\",period_final_value:17\"}","\"{series_name : \\\"Alarm\\\",period_name:Q1 / 2013\\\",period_final_value:17\\\"}\"","{series_name : \"Alarm\",period_name:Q2 / 2013\",period_final_value:15\"}","\"{series_name : \\\"Alarm\\\",period_name:Q2 / 2013\\\",period_final_value:15\\\"}\"","{series_name : \"Alarm\",period_name:Q3 / 2013\",period_final_value:13\"}","\"{series_name : \\\"Alarm\\\",period_name:Q3 / 2013\\\",period_final_value:13\\\"}\"","{series_name : \"Alarm\",period_name:Q1 / 2013\",period_final_value:14.103\"}","\"{series_name : \\\"Alarm\\\",period_name:Q1 / 2013\\\",period_final_value:14.103\\\"}\"","{series_name : \"Alarm\",period_name:Q2 / 2013\",period_final_value:14.404499999999999\"}","\"{series_name : \\\"Alarm\\\",period_name:Q2 / 2013\\\",period_final_value:14.404499999999999\\\"}\"","{series_name : \"Alarm\",period_name:Q3 / 2013\",period_final_value:14.966999999999999\"}","\"{series_name : \\\"Alarm\\\",period_name:Q3 / 2013\\\",period_final_value:14.966999999999999\\\"}\"","{series_name : \"Alarm\",period_name:Q1 / 2013\",period_final_value:15.67\"}","\"{series_name : \\\"Alarm\\\",period_name:Q1 / 2013\\\",period_final_value:15.67\\\"}\"","{series_name : \"Alarm\",period_name:Q2 / 2013\",period_final_value:16.005\"}","\"{series_name : \\\"Alarm\\\",period_name:Q2 / 2013\\\",period_final_value:16.005\\\"}\"","{series_name : \"Alarm\",period_name:Q3 / 2013\",period_final_value:16.63\"}","\"{series_name : \\\"Alarm\\\",period_name:Q3 / 2013\\\",period_final_value:16.63\\\"}\"","{series_name : \"Target\",period_name:Q1 / 2013\",period_final_value:17\"}","\"{series_name : \\\"Target\\\",period_name:Q1 / 2013\\\",period_final_value:17\\\"}\"","{series_name : \"Target\",period_name:Q2 / 2013\",period_final_value:15\"}","\"{series_name : \\\"Target\\\",period_name:Q2 / 2013\\\",period_final_value:15\\\"}\"","{series_name : \"Target\",period_name:Q3 / 2013\",period_final_value:13\"}","\"{series_name : \\\"Target\\\",period_name:Q3 / 2013\\\",period_final_value:13\\\"}\"","{series_name : \"Target\",period_name:Q1 / 2013\",period_final_value:14.103\"}","\"{series_name : \\\"Target\\\",period_name:Q1 / 2013\\\",period_final_value:14.103\\\"}\"","{series_name : \"Target\",period_name:Q2 / 2013\",period_final_value:14.404499999999999\"}","\"{series_name : \\\"Target\\\",period_name:Q2 / 2013\\\",period_final_value:14.404499999999999\\\"}\"","{series_name : \"Target\",period_name:Q3 / 2013\",period_final_value:14.966999999999999\"}","\"{series_name : \\\"Target\\\",period_name:Q3 / 2013\\\",period_final_value:14.966999999999999\\\"}\"","{series_name : \"Target\",period_name:Q1 / 2013\",period_final_value:15.67\"}","\"{series_name : \\\"Target\\\",period_name:Q1 / 2013\\\",period_final_value:15.67\\\"}\"","{series_name : \"Target\",period_name:Q2 / 2013\",period_final_value:16.005\"}","\"{series_name : \\\"Target\\\",period_name:Q2 / 2013\\\",period_final_value:16.005\\\"}\"","{series_name : \"Target\",period_name:Q3 / 2013\",period_final_value:16.63\"}","\"{series_name : \\\"Target\\\",period_name:Q3 / 2013\\\",period_final_value:16.63\\\"}\""]

\ を削除し、 "" 内のすべての値を読み込んで、さらにコードで使用できるようにしたいと考えています。

4

3 に答える 3

2

これを構築するために推奨できる唯一の方法は、確信が持てない場合、シリアライザーを使用することです。例えば:

var obj = new {
    series_name = final_resulted_series_name,
    period_name,
    period_final_value 
};
var json = JsonConvert.SerializeObject(obj);

これは( values abcdefおよびghiそれぞれに対して)次を生成します。

{"series_name":"abc","period_name":"def","period_final_value":"ghi"}

連結を使用している場合、最終的には噛み付きます。これを手動で行うには、すべてのエンコーディング ルール、エッジ ケース、およびコーナー ケースを知る必要があります。

于 2013-11-12T11:27:54.543 に答える
2

出力をコンソール ウィンドウに書き込みます。引用符は正常にエスケープされます。おそらく、\スラッシュを節約するデバッガーで表示しています。

string final_resulted_series_name = "foo";
string period_name = "bar";
string period_final_value = "foobar";
string resulted_value = "{series_name : \"" + final_resulted_series_name + "\",period_name: \"" + period_name + "\",period_final_value: \"" + period_final_value + "\"}";

Console.Write(resulted_value);

与えます:

{series_name: "foo", period_name: "bar", period_final_value: "foobar"}

Marc が親切に指摘しているように、これはおそらく json 文字列を作成する最良の方法ではありません。jsonシリアライザーの使用をお勧めします。

json.netを使用している場合は、次のjsonConvert方法を使用できます。

JsonConvert.SerializeObject(obj);

そうでない場合は、次を使用できます。

public virtual string ToJson()
{
    string json = null;
    using (MemoryStream ms = new MemoryStream())
    {
        DataContractJsonSerializer ser = new DataContractJsonSerializer(this.GetType());
        ser.WriteObject(ms, this);
        json = Encoding.UTF8.GetString(ms.ToArray());
    }

    return json;
}

DataContractオブジェクトに aを使用し、this を使用するようにマークする必要がありますSerializable

[DataContract]
[Serializable]
于 2013-11-12T11:26:52.880 に答える
1
Console.WriteLine("You can use \"slashes\" to escape \" double quotes\"");
Console.WriteLine(@"Or use ""@"" before the string and double ""double quotes""");

出力:

「スラッシュ」を使用して「二重引用符」をエスケープできます

または、文字列の前に「@」を使用し、二重の「二重引用符」を使用します

デバッガーで文字列を検査している場合でも、コードに表示されているとおりに文字列が表示されることに注意してください (IE ではスラッシュのエスケープや二重引用符が含まれます)。

于 2013-11-12T11:27:03.387 に答える