【问题标题】:Android and WCF - wcf ignores complex json arrayAndroid 和 WCF - wcf 忽略复杂的 json 数组
【发布时间】:2013-11-05 20:35:26
【问题描述】:

我已经成功地将 json 发送到我的 wcf,但是当我发送一个非常复杂的具有多个转义的 json 数组时,服务会忽略它。当我尝试调试它时,我可以看到 json 没有通过 webmethod 调用,因为该值为 null。它抱怨无法识别的转义序列。我已经尝试使用

在 java/android 中逃脱我的转义
String.Replace("\\", "\\\\"); 

但这似乎对我不起作用。

有没有办法让 wcf 忽略 json 中的转义?除了 microsoft webservices 和 wcf 之外,我从来没有遇到过这个问题,而且非常痛苦。

["{\"CRASH_CONFIGURATION\":{\"hardKeyboardHidden\":\"HARDKEYBOARDHIDDEN_YES\",\"orientation\":\"ORIENTATION_PORTRAIT\",\"keyboard\":\"KEYBOARD_NOKEYS\",\ "screenLayout\":\"SCREENLAYOUT_SIZE_NORMAL+SCREENLAYOUT_LONG_NO\",\"mcc\":310,\"textLayoutDirection\":0,\"locale\":\"en_US\",\"compatScreenHeightDp\":455,\ "compatSmallestScreenWidthDp\":320,\"fontScale\":\"1.0\",\"navigationHidden\":\"NAVIGATIONHIDDEN_YES\",\"screenWidthDp\":320,\"fontTypeIndex\":\"-1\ ",\"screenHeightDp\":455,\"uiMode\":\"UI_MODE_TYPE_NORMAL+UI_MODE_NIGHT_NO\",\"userSetLocale\":false,\"navigation\":\"NAVIGATION_NONAV\",\"smallestScreenWidthDp\": 320,\"keyboardHidden\":\"KEYBOARDHIDDEN_NO\",\"seq\":4,\"mnc\":410,\"compatScreenWidthDp\":320,\"touchscreen\":\"TOUCHSCREEN_FINGER\"} ,\"USER_CRASH_DATE\":\"2013-11-04T19:58:14.000-08:00\",\"EVENTSLOG\":\"11-04 19:55:07.501 I\\/notification_enqueue(373):

<bindings>
  <basicHttpBinding>
    <binding name="SoapEndpointBinding"
             closeTimeout="00:10:00"
             maxBufferPoolSize="250000000"
             maxReceivedMessageSize="250000000"
             openTimeout="00:10:00"
             receiveTimeout="00:10:00"
             sendTimeout="00:10:00">
      <readerQuotas maxDepth="4500000" maxStringContentLength="4500000" maxBytesPerRead="40960000" maxNameTableCharCount="250000000" maxArrayLength="4500000"/>
      <security mode="None"/>
    </binding>
  </basicHttpBinding>
  <webHttpBinding>
    <binding name="RestEndpointBinding"
             closeTimeout="00:10:00" 
             maxBufferPoolSize="250000000" 
             maxReceivedMessageSize="250000000" 
             openTimeout="00:10:00" 
             receiveTimeout="00:10:00" 
             sendTimeout="00:10:00">
      <readerQuotas maxDepth="4500000" maxStringContentLength="4500000" maxBytesPerRead="40960000" maxNameTableCharCount="250000000" maxArrayLength="4500000"/>
      <security mode="None"/>
    </binding>
  </webHttpBinding>
</bindings>

【问题讨论】:

  • 您的请求如何?
  • 它的方式来大张贴在这里。当我尝试使用从 replace 方法获得的字符串进行调试时,它抱怨意外字符“\”
  • 有什么方法可以让 wcf 忽略字符串中的转义?
  • 对不起,如果没有一些代码如何生成 json-string,也没有 json-string 本身,我无能为力。
  • 您仍然可以尝试通过其他工具(如 Firefox 的海报)发布字符串,看看它是否有效,然后快速更改以找到您的问题。

标签: android json wcf


【解决方案1】:

您不能转义转义字符\

例如不要将"hello\nworld" 转义为"hello\\nworld"

【讨论】:

  • 即使我不转义它,wcf 也不会接受 json 字符串。我知道,因为它永远不会进入 web 方法来触发我创建的日志事件。
  • 这也可能是由于您的 json-string 的其他内容。尝试使用\"EVENTSLOG\":\"test\" 发送您的请求,看看它是否进入。您可以使用firefox-plugin 海报来提高您的测试速度。
【解决方案2】:

我刚刚在前端做了一个快速而肮脏的替换,然后在后端使用一系列不寻常的字符来替换所有的返回和转义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2010-09-17
    • 2012-04-30
    相关资源
    最近更新 更多