この問題について多数の質問を読んでいますが、私の特定の問題を解決できないようです。JsonConvert.SerializeObjectバックスラッシュをエスケープする
Webサービス関数からjson文字列を返しています。
Iは、これらのオブジェクトを持っている:
public class WebServiceInitResult
{
public List<Activity> Activities { get; set; }
//rest of properties left out...
}
public class Activity
{
public string IconCode { get; set; }
//rest of properties left out...
}
IconCode
はfontawesome文字、これらのいずれかの文字コードである:
\uf0b1
\uf274
\uf185
\uf0fa
\uf0f4
\uf015
それらは、上に示したとおりにデータベースに格納されています。
私は以下のようにhttpReponse.Content
を設定すると、バックスラッシュがエスケープされています
httpResponseMessage.Content = new StringContent(JsonConvert.SerializeObject(webServiceInitResult), Encoding.UTF8, "application/json");
郵便配達で受信したJSONレスポンスは、次のとおりです。
"activities": [
{
"ActivityCode": 2,
"DisplayValue": "Shopping",
"BackgroundColour": "E74C3C",
"IconCode": "\\uf0b1",
"ApplicationId": 2,
"Application": null,
"Id": 1,
"Active": true,
"DateCreated": "2016-11-25T10:15:40"
},
//rest of activities
]
あなたが見ることができるように、IconCode
バックスラッシュはエスケープされています。他の質問を読むことから、私がシリアル化するとき、または応答が送られたときにJson.NETによってこれが起こっているかどうか確信することができません。
代わりにObjectContent
を使用して解決しようとしましたが、私はJson.NETを避けることができましたが、同じ結果を返しました!
httpResponseMessage.Content = new ObjectContent(typeof(TravelTrackerWebServiceInitResult), webServiceInitResult, new JsonMediaTypeFormatter() , "application/json");
今、私は立ち往生しています!
これを行うより良い方法は、私が必要とするものを正確に返しますか?文字は、適切なアイコンを表示するためにアプリケーションによって使用されます。
追加情報: 私はもともと、これらの値はハードコードしていたし、すべてが正常に動作するように見えた:
webServiceInitResult.activities_TT = new List<Activity_TT>()
{
new Activity() { ActivityCode = 2, BackgroundColour = "E74C3C", DisplayValue="Shopping", IconCode="\uf0b1" },
new Activity() { ActivityCode = 3, BackgroundColour = "BF7AC5", DisplayValue="Running", IconCode="\uf274" },
new Activity() { ActivityCode = 4, BackgroundColour = "AF7AC5", DisplayValue="Walking", IconCode="\uf185" },
new Activity() { ActivityCode = 5, BackgroundColour = "3498DB", DisplayValue="Jogging", IconCode="\uf0fa" },
new Activity() { ActivityCode = 6, BackgroundColour = "2ECC71", DisplayValue="Resting", IconCode="\uf0f4" },
new Activity() { ActivityCode = 7, BackgroundColour = "F39C12", DisplayValue="Skipping", IconCode="\uf015" }
};
感謝。
* "IconCodeは、フォントワーム文字の文字コードです。これらは、次のいずれかです:' \ uf0b1' \ uf274'' \ uf185'' \ uf0fa'' \ uf0f4'' \ uf015'これらは、データベースを上記のように正確に表示してください」。*それが問題です。 '\'、 'u'、' f'、 '0'、' b'、 '1'の文字として格納されている場合、JSONシリアライザはそのバックスラッシュをエスケープして正確に正しいことをしています。そのUnicodeエスケープを処理したい場合は、 'IconCode'文字列に割り当てる前に処理する必要があります。文字列には実際にUnicodeエスケープの文字列ではなく文字が含まれています。 –
'IconCode'変数はどうやって設定していますか? C#リテラルを使用した場合、あなたが投稿したものではなく実際のUnicode文字を取得します。 'Debug.Assert(" \ uf0b1 ".Length == 1)' –
データベースにはUnicodeに関する問題もなく、 'nvarchar'カラムに何かを保存することができます。エスケープシーケンスを実際の文字の代わりに6つの別個の文字として格納すると、*あなたのコードはエスケープシーケンスを最初にエスケープする必要があります。値をUnicode列に格納するだけでいいのですか? –