Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重新映射JSON架构中的无效属性名称_C#_Json.net - Fatal编程技术网

C# 重新映射JSON架构中的无效属性名称

C# 重新映射JSON架构中的无效属性名称,c#,json.net,C#,Json.net,我有大量的外部JSON模式和JSON文档需要作为CSharp项目的一部分进行解析 它们来自一家外部公司,似乎是JSON和其他东西的混合体。 我能够很好地解析JSON,但我需要模式来理解它们 问题来自将“类型”定义为“元数据”以及将实际类型名称重新映射为“数据类型” { "type": "MetaData", "name": "atypeoffield", "title":

我有大量的外部JSON模式和JSON文档需要作为CSharp项目的一部分进行解析 它们来自一家外部公司,似乎是JSON和其他东西的混合体。 我能够很好地解析JSON,但我需要模式来理解它们

问题来自将“类型”定义为“元数据”以及将实际类型名称重新映射为“数据类型”

{
    "type": "MetaData",
    "name": "atypeoffield",
    "title": "ancillary data for field type",
    "object_ID": "MetaData-atypeoffield",
    "parent_object_ID": "fieldreceiver",
    "dataType": "object",
    "properties": {
        "fieldreceivercontrol": {
            "description": "ancillary data for control",
            "type": "array",
            "minItems": 1,
            "maxItems": 144,
除了在输入的过程中进行字符串替换之外,还有什么更优雅的方法可以解决这个问题,您可以为Newtonsoft JSON想到吗


我希望动态加载模式,然后使用它们对web服务进行短暂的字段验证,但主要的要求是在运行时动态加载一组模式,以确定要验证的字段

我最终使用了字符串替换和正则表达式替换来清理JSON和相关模式,因此我能够获得一个干净的读取

        if (matchedJson.Contains("type\":")) matchedJson = matchedJson.Replace("type\":", "metadata_type\":");
        if (matchedJson.Contains("dataType\":")) matchedJson = matchedJson.Replace("dataType\":", "type\":");
        if (matchedJson.Contains("\\\"")) matchedJson = matchedJson.Replace("\\\"", "\"");
        string containsPattern = @"(""config"": ""{)(.*)(""\n})";
        string replacement = "$2";
        string cleanJson = Regex.Replace(matchedJson, containsPattern, replacement,
                  RegexOptions.IgnoreCase,
                  TimeSpan.FromSeconds(0.5));

它当然不优雅,但允许我移动拨号盘,并删除导致模式验证失败的元素。

模式有效吗?Newtonsoft有一个单独的包,用于根据…进行解析和验证。。。。看起来不是。使用关键字指示值类型。您的架构似乎正在使用
“数据类型”
。您是否有一些说明模式标准的文档?你能把它重新映射到吗?我已经写了一个正则表达式来重新映射无效的关键字-丑陋的福吉,但它必须这样做!