将Jsonstring从Web请求转换为String

时间:2014-02-22 07:25:58

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

我试图在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"}]

2 个答案:

答案 0 :(得分: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缺失\。

这是您自己的网络服务吗?您的Web请求是否将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);
                }
            };
        }
    }
}

答案 1 :(得分:-1)

试试这个

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