将 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" 个对象时才适用。