将 Json 文件中的 Json 信息解析为字符串
Parsing Json information from a Json file as a string
我正在寻找一些关于解析下面 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;
,上面的代码也没有从库中获取 JavaScriptSerializer 函数
谁能帮我让这个代码段工作
我希望我提供了足够的信息
问题似乎出在你的这行代码中var myObj = MySerializer.Deserialize<T>(source);
你需要给出对象的类型而不是 T。
编辑:我刚刚意识到您遇到了另一个问题 - 您的编译器无法识别 System.Web.Script.Serialization.JavaScriptSerializer
类型。您需要在项目中添加对 System.Web.Extensions.dll
的引用。我不知道你用的是什么 IDE,但是例如在 SharpDevelop 中,你可以右键单击 References > Add Reference > 在过滤器中开始输入 "System.Web.Extensions" > 在结果中找到 "System.Web.Extensions" 并双击它(它将移到较低的位置 window)> 点击确定并编译您的项目。
如果你还想用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" class(C# 中可能有另一个术语表示普通的 classes),其字段与您的字符串响应中的字段匹配。由于您的字段 isWebLogin、registryName 和 walletCode 不是主对象(响应)的直接部分,而是属于子 class(客户端),因此您需要两个 classes: Response(或随便称呼它want) 然后字段 "client" 必须匹配响应中的字符串(以及子 class 的字段).
结果:
无论如何,我还提供了一个使用 Regex 的解决方案,但我绝对不推荐这样做。它仅适用于作为一种解决方法,并且只有在您知道您的响应永远不会包含多个 "client" 个对象时才适用。
我正在寻找一些关于解析下面 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;
谁能帮我让这个代码段工作 我希望我提供了足够的信息
问题似乎出在你的这行代码中var myObj = MySerializer.Deserialize<T>(source);
你需要给出对象的类型而不是 T。
编辑:我刚刚意识到您遇到了另一个问题 - 您的编译器无法识别 System.Web.Script.Serialization.JavaScriptSerializer
类型。您需要在项目中添加对 System.Web.Extensions.dll
的引用。我不知道你用的是什么 IDE,但是例如在 SharpDevelop 中,你可以右键单击 References > Add Reference > 在过滤器中开始输入 "System.Web.Extensions" > 在结果中找到 "System.Web.Extensions" 并双击它(它将移到较低的位置 window)> 点击确定并编译您的项目。
如果你还想用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" class(C# 中可能有另一个术语表示普通的 classes),其字段与您的字符串响应中的字段匹配。由于您的字段 isWebLogin、registryName 和 walletCode 不是主对象(响应)的直接部分,而是属于子 class(客户端),因此您需要两个 classes: Response(或随便称呼它want) 然后字段 "client" 必须匹配响应中的字符串(以及子 class 的字段).
结果:
无论如何,我还提供了一个使用 Regex 的解决方案,但我绝对不推荐这样做。它仅适用于作为一种解决方法,并且只有在您知道您的响应永远不会包含多个 "client" 个对象时才适用。