使用c#进行动态JSON模式验证

时间:2017-08-02 07:30:28

标签: c# json

我正在尝试动态地进行JSON模式验证。我们从上传的文件中获取JSON并尝试验证这是否是完全JSON。这是一个On premise应用程序。我不能使用JSON.net。我无法安装任何其他第三方工具来验证这一点。我尝试了两种方法,如下所示。

1.我使用System.Web.Helper并使用以下代码,我收到错误

代码:

var jsonstring =“{\”user \“:{\”name \“:\”asdf \“,\”age \“:\”26 \“,\”teamname \“:\”b \“ ,\ “电子邮件\”:\ “C:\”,\ “的玩家\”:[\ “1 \”,\ “2 \”]}}“;

            var jsonObject = Json.Decode(jsonstring);

Error is "Attempt by method 'System.Web.Helpers.Json.Decode(System.String)' to access field 'System.Web.Helpers.Json._serializer' failed"。我搜索了解决方案,发现我们需要在解决方案的调试属性中取消选中一个复选框。但这只适用于我的控制台应用程序。但不能在我们的VS 2012解决方案中使用。有什么方法可以解决这个问题吗?

  1. 接下来是,我尝试使用下面给出的JavaScriptSerializer,并成功地在我的objJson中得到了结果。
  2. JavaScriptSerializer serializer = new JavaScriptSerializer();

    string inputContent;

    StreamReader inputStreamReader = new StreamReader(FileUploadControl.PostedFile.InputStream);

    inputContent = inputStreamReader.ReadToEnd();

    inputContent = inputContent.Replace(“\ r”,“”)。Replace(“\ n”,“”)。Replace(“\ t”,“”);

    var objJson = serializer.Deserialize>(inputContent);

    但是当我试图获得这个结果键值对的值时,我得到的错误就像在图像中一样。错误是Dynamic operations can only be performed in homogenous AppDomain。为此,找到的解决方案是在web.config文件中将属性“legacyCasModel = true”更改为“legacyCasModel = false”。但由于这是OnPremise应用程序,我无法更改此属性。请帮助。

1 个答案:

答案 0 :(得分:0)

建议您查看此stackoverflow post
简而言之,您想要做的是:

  1. 执行一些基本检查,即JSON字符串是否以
  2. 开头
    '{'
        or '['
    
    1. 尝试使用JToken.Parse解析JSON字符串(如果有) 解析时只需记录或显示给最终用户并继续前进!你是公正的 试图验证JSON字符串不试图正确清理它?
    2. PS:请参考链接的问题以获取更多详细信息。