【问题标题】:WCF Web JSON request double slashWCF Web JSON 请求双斜杠
【发布时间】:2012-10-29 12:48:04
【问题描述】:

我有 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);

【问题讨论】:

  • 你为什么不直接从response.GetResponseStream()读取而不是创建临时字符串、字节数组和流。

标签: c# json wcf slash


【解决方案1】:

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

如果问题存在于调试器之外,我需要查看更多代码以排除错误输入是问题的根源。特别是在您的发送代码中,这个和 ConfSettings 的结构是什么?被损坏的属性是否设置正确,或者您是否使用常规字符串文字而不是逐字字符串文字:

string rightVal = "C:\\asdf\\log.log";
string wrongVal = @"C:\\asdf\\log.log";
//string rightVal = @"C:\asdf\log.log";

【讨论】:

    【解决方案2】:

    问题出在DataContractJsonSerializer。我用JavaScriptSerializer 替换它,现在效果很好!感谢您的回答!

    【讨论】:

      猜你喜欢
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      相关资源
      最近更新 更多