将Json文件中的Json信息解析为字符串

时间:2018-07-19 08:09:04

标签: c# javascriptserializer

我正在寻找有关解析以下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函数。

有人可以帮助我让此代码段正常工作吗 我希望我提供了足够的信息

2 个答案:

答案 0 :(得分:0)

问题似乎出在您的代码Flowable的这一行中,您需要提供对象的类型而不是T。

答案 1 :(得分:0)

编辑:我刚刚意识到您遇到了另一个问题-您的编译器无法识别System.Web.Script.Serialization.JavaScriptSerializer类型。您需要在项目中添加对System.Web.Extensions.dll的引用。我不知道您使用的是什么IDE,但是例如在SharpDevelop中,您可以右键单击参考>添加参考>在过滤器中开始键入“ System.Web.Extensions”>在结果中找到“ System.Web.Extensions”并双击它(它将被移到下面的窗口中)>单击确定并编译您的项目。

enter image description here

如果您仍然想使用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并不直接属于主对象(响应),而是属于子类(客户端),因此您需要两个类:响应(或随意调用),然后是字段“客户端”必须在响应中匹配字符串(以及子类的字段)。

结果:

parsed json - running program

无论如何,我还提供了使用Regex的解决方案,但我绝对不建议这样做。仅当您知道响应永远不会包含多个“客户端”对象时,它才适合作为变通方法。