【问题标题】:Convert Jsonstring from Web request to String将 Web 请求中的 Jsonstring 转换为 String
【发布时间】:2014-02-24 11:14:38
【问题描述】:

我试图从 Xamarin Android 应用程序中的 Web 请求中解析 json。但我得到了下面的 json 字符串

[{\"type1\":val1,\"type2\":\"val2",\"type3\":\"val3\",\"type4\":val4},
{\"type1\":val1,\"type2\":\"val2",\"type3\":\"val3\",\"type4\":val4}]

如何将其转换为如下所示的字符串

[{"type1":"val1","type2":"val2","type3":"val3","type4":"val4"},
{"type1":"val1","type2":"val2","type3":"val3","type4":"val4"}]

【问题讨论】:

  • 您是如何获得 JSON 的?您确定服务器没有发送这样转义的字符串吗? Android 或 Xamarin 中没有任何内在因素会导致这种情况。

标签: android json replace asp.net-web-api xamarin.android


【解决方案1】:

您是否通过复制 C# 运行时值获得了字符串值?如果是这样,它看起来是正确的,但有一些小错误。

[{\"type1\":val1,\"type2\":\"val2",\"type3\":\"val3\",\"type4\":val4},
{\"type1\":val1,\"type2\":\"val2",\"type3\":\"val3\",\"type4\":val4}]

应该是:

[{\"type1\":\"val1\",\"type2\":\"val2\",\"type3\":\"val3\",\"type4\":\"val4\"},
{\"type1\":\"val1\",\"type2\":\"val2\",\"type3\":\"val3\",\"type4\":\"val4\"}]

一些 val* 根本没有引号,并且 type2 在引号中缺少 \。

它是您自己的网络服务吗?您的网络请求是否将 JSON 指定为格式?如果服务正在运行 JavaScript,它是否调用 JSON.stringify(...) 来规范化 JSON 对象?如果您使用 MVC 或其他 MS 技术,请确保您没有将响应包装在双 JSON 中(例如,由控制器返回一个字符串,其中字符串是 JSON 序列化的,因为这将导致加倍)。

验证 Web 服务返回的 JSON 的好工具是 PostMan。如果它还返回带有 \'s 的字符串,则说明服务本身有问题。

这是一个带有 JSON.Net 序列化器的 Android 小测试器:

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using System.Collections.Generic;
using Android.Util;

namespace JsonTest
{
    public class TypeClass 
    {
        public string type1 { get; set; }
        public string type2 { get; set; }
        public string type3 { get; set; }
        public string type4 { get; set; }
    }

    [Activity (Label = "JsonTest", MainLauncher = true)]
    public class MainActivity : Activity
    {
        int count = 1;

        private const string JsonText = "[{\"type1\":\"val1\",\"type2\":\"val2\",\"type3\":\"val3\",\"type4\":\"val4\"}," +
                                      "{\"type1\":\"val1\",\"type2\":\"val2\",\"type3\":\"val3\",\"type4\":\"val4\"}]";



        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate (bundle);

            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);

            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button> (Resource.Id.myButton);

            button.Click += delegate
            {
                var resp = Newtonsoft.Json.JsonConvert.DeserializeObject<List<TypeClass>>(JsonText);

                foreach (var t in resp)
                {
                    Log.Info("Type1", t.type1);
                    Log.Info("Type2", t.type2);
                    Log.Info("Type3", t.type3);
                    Log.Info("Type4", t.type4);
                }
            };
        }
    }
}

【讨论】:

    【解决方案2】:

    试试这个

    String jsonString = json.replaceAll("\\\\", "");
    

    【讨论】:

    • 在 Xamarin Android 中,没有像 string.replaceall 这样的方法。我也试过用这个“\\\\”替换方法,不工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2018-01-06
    • 2011-07-11
    • 2014-01-17
    相关资源
    最近更新 更多