我试图在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"}]
答案 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("\\\\", "");