在C#中快速检查字符串是XML还是JSON的方法

fin*_*ook 41 c# xml json json.net

我在控制台应用程序中使用C#,我需要一种快速方法来检查从另一个服务返回的字符串是XML还是JSON.

我知道,如果这只是XML,我可以检查它,一个模式,或者如果它只是JSON我可以尝试用JSON.Net解析它,但有一个更快的方式 - 也许用建立.NET函数 - 只是为了在继续处理它之前告诉它是什么?

Art*_*yom 57

非常简单:

  1. 有效的JSON始终以'{'或'['开头
  2. 有效的XML始终以'<'开头

我在谈论非空间数据.

  • 如果您从服务器获取字符串并且它可能是JSON,或者它可能是其他内容,则这不完全有效.如果它发回包含在{}或<>中的另一个字符串怎么办? (3认同)
  • 我不明白为什么这被标记为正确的答案,所有这一切确认字符串COULD是JSON或XML.但是字符串{{{{{有效JSON?没有... (3认同)
  • @JLo因为这个问题与XML或JSON的验证无关,而是以最快的方式区分两者. (3认同)

Run*_* FS 33

public static bool IsJson(this string input){
    input = input.Trim();
    return input.StartsWith("{") && input.EndsWith("}") 
           || input.StartsWith("[") && input.EndsWith("]");
}
Run Code Online (Sandbox Code Playgroud)

它有点脏,但简单快捷

它基本上足以测试第一个角色.测试最后一个是测试良好形成的一种非常粗鲁的方法.它并不能保证它只是提高了它形成良好的可能性.

如果你想要一个更强大的版本,你可以利用if的短路来仅评估良好的形状,如果初始检查是好的.以下代码依赖于JSON.net

public static bool IsJson(this string input){
    input = input.Trim();
    Predicate IsWellFormed = () => {
             try {
                JToken.Parse(input);
             } catch {
                return false;
             }
             return true;
    }
    return (input.StartsWith("{") && input.EndsWith("}") 
            || input.StartsWith("[") && input.EndsWith("]"))
           && IsWellFormed()
}
Run Code Online (Sandbox Code Playgroud)