2

我有 WCF 服务,其方法发送路径如下:“C:\asdf\log.log”。

客户端获取“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

接收到的实际值是否带有双斜杠,或者它只是出现在带有双斜杠的调试器中?调试器将显示某些字符的转义序列,包括 \\ 表示 \,但字符串的实际内容将是正确的。

如果问题存在于调试器之外,我需要查看更多代码以排除错误输入是问题的根源。特别是在您的发送代码中,这个和 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 回答