2

「C:\asdf\log.log」のようなパスを送信するメソッドを持つ WCF サービスがあります。

クライアントは「C:\\asdf\\log.log」を取得します

問題はどこにあり、解決方法は?

コードを送信

MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser =
    new DataContractJsonSerializer(typeof(ConfSettings));
ser.WriteObject(stream1, this);
stream1.Position = 0;
StreamReader sr = new StreamReader(stream1);
string tmp = sr.ReadToEnd();
return (tmp);

コードの再取得

Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
string result = responseFromServer;
string tmp = result
byte[] bytes = new byte[tmp.Length * sizeof(char)];
System.Buffer.BlockCopy(tmp.ToCharArray(), 0, bytes, 0, bytes.Length);
MemoryStream memStream = new MemoryStream(bytes, 2, bytes.Length-4);
DataContractJsonSerializer ser =
    new DataContractJsonSerializer(typeof(ConfSettings));
conf = (ConfSettings)ser.ReadObject(memStream);
4

2 に答える 2

0

受け取った実際の値には 2 つのスラッシュがありますか? それとも、デバッガーに表示されるだけで 2 つのスラッシュが付いていますか? デバッガーは、\ の \\ を含む一部の文字のエスケープ シーケンスを表示しますが、文字列の実際の内容は正しいものです。

問題がデバッガの外にある場合は、問題の原因として不適切な入力を排除するために、さらにコードを確認する必要があります。特にあなたの送信コードでは、これと ConfSettings の構造は何ですか? 破損しているプロパティは正しく設定されていますか、それとも逐語的な文字列リテラルの代わりに通常の文字列リテラルを使用しましたか:

string rightVal = "C:\\asdf\\log.log";
string wrongVal = @"C:\\asdf\\log.log";
//string rightVal = @"C:\asdf\log.log";
于 2012-11-09T15:53:20.247 に答える
0

問題はにありましたDataContractJsonSerializer。私はそれを置き換えてJavaScriptSerializer、今ではこれはうまくいきます! 答えてくれてありがとう!

于 2012-11-19T08:39:26.127 に答える