我正在寻找有关解析以下json文件中的“ mppdemo”值的帮助(请参见屏幕截图)
{
"client":{
"isWebLogin":false,
"registryName": "mpdemo",
"walletCode": "Local"
}
}
我已经对网络进行了一些研究,但是很多例子已经过时或无法使用。
这是我尝试过的
//JObject T = JObject.Parse(File.ReadAllText(DownloadConfigFilelocation));
var source = File.ReadAllText(DownloadConfigFilelocation);
var JavaScriptSerializer MySerializer = new JavaScriptSerializer();
var myObj = MySerializer.Deserialize<T>(source);
var RegistryName = myObj.searchResults[0].hotelID;
MessageBox.Show(RegistryName);
即使我使用using System.Web.Script.Serialization;
有人可以帮助我让此代码段正常工作吗 我希望我提供了足够的信息
答案 0 :(得分:0)
问题似乎出在您的代码Flowable
的这一行中,您需要提供对象的类型而不是T。
答案 1 :(得分:0)
编辑:我刚刚意识到您遇到了另一个问题-您的编译器无法识别System.Web.Script.Serialization.JavaScriptSerializer
类型。您需要在项目中添加对System.Web.Extensions.dll
的引用。我不知道您使用的是什么IDE,但是例如在SharpDevelop中,您可以右键单击参考>添加参考>在过滤器中开始键入“ System.Web.Extensions”>在结果中找到“ System.Web.Extensions”并双击它(它将被移到下面的窗口中)>单击确定并编译您的项目。
如果您仍然想使用System.Web.Script.Serialization.JavaScriptSerializer
,我可能会这样:
using System;
using System.Text.RegularExpressions;
using System.Web.Script.Serialization;
namespace jsonhratky
{
public static class Program {
public static void Main(string[] args)
{
var instance = new JsonParsingTest();
}
}
public class JsonParsingTest
{
class Response {
public Client client;
}
class Client {
public bool isWebLogin;
public string registryName;
public string walletCode;
}
const string JSON_EXAMPLE = ("{" + ("\"client\":{" + ("\"isWebLogin\":false," + ("\"registryName\": \"mpdemo\"," + ("\"walletCode\": \"Local\"" + ("}" + "}"))))));
public JsonParsingTest() {
// Solution #1 using JavaScriptSerializer
var serializer = new JavaScriptSerializer();
Response parsed = serializer.Deserialize<Response>(JSON_EXAMPLE);
Console.WriteLine("parsed isWebLogin: " + parsed.client.isWebLogin);
Console.WriteLine("parsed registryName: " + parsed.client.registryName);
Console.WriteLine("parsed walletCode: " + parsed.client.walletCode);
// Solution #2 (not recommended)
var matches = Regex.Match(JSON_EXAMPLE, "registryName\":.*?\"([^\"]+)\"", RegexOptions.Multiline);
if (matches.Success) {
Console.WriteLine("registryName parsed using Regex: " + matches.Groups[1].Value);
} else {
Console.WriteLine("Solution using Regex failed.");
}
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
}
}
}
您需要创建一个“ POJO”类(对于普通的旧类,C#中可能还有另一个术语),其字段与字符串响应中的字段匹配。由于您的字段是WebLogin,registryName和walletCode并不直接属于主对象(响应),而是属于子类(客户端),因此您需要两个类:响应(或随意调用),然后是字段“客户端”必须在响应中匹配字符串(以及子类的字段)。
结果:
无论如何,我还提供了使用Regex的解决方案,但我绝对不建议这样做。仅当您知道响应永远不会包含多个“客户端”对象时,它才适合作为变通方法。