2016-04-13 7 views
2

私は共通の最初のプロパティのみを持つさまざまなjsonsのトンを解析しています。 この最初のプロパティの値によっては、JSONを別のオブジェクトに解析して、考えられるエラーを別の方法で処理します。しかし、jsonは有効ではありませんが、最初のプロパティの値を知りたい(有効である限り)ので、解析エラーを処理できます。これがJson.Netで可能かどうか疑問に思っていました。もちろん私は、少なくとも第一の特性が有効であること例えば、このようなものを想定していますJsonが有効でない場合でも最初のプロパティを解析する方法は?

{ 
    "parsingType":"sometype", 
    "someothervalue":123, 
    "someval"123, 
} 

例外がスローされているので、私は.Parseを使用しているとき、私は何の結果を取得しない次のことを試してみましたが、:

JToken jtoken = JToken.Parse(json); 
var theValueIWantToGet = jtoken["parsingType"].Value<string>(); 
+0

この値のみに興味があるので、なぜそれをまったく解析しないのですか?ちょうど文字列検索を行います。それも速くなるでしょう。 – Transcendental

+0

JSONで正確に何をやっていますか?それともどこからそれを得るのですか?独自のアプリケーションやサービスから来ている場合は、 'TypeNameHandling.All'と' FormatterAssemblyStyle.Simple'を 'JsonSerializerSettings'で追加することができます。これにより、デシリアライザはあなたのアセンブリ内で正しいタイプを認識して見つけることができます。 – rinukkusu

+0

[無効なjsonをどのように逆シリアル化できますか?]のようにJsonReaderを使用してみてください。オブジェクトの切り捨てリスト](http://stackoverflow.com/q/36576928/10263) –

答えて

1

私は、解析エンジンがjsonを部分的に解析するとは思わない。パーサは

 string json = "{ \"parsingType\":\"sometype\", \"someothervalue\":12}"; 
     var props = json.Replace('{',' ').Replace('}',' ').Split(',').ToList(); 
     if (props.Count > 0) 
     { 
      var firstProp = props[0].Split(':'); 
      var propName = firstProp[0]; 
      var propVal = firstProp[1]; 

     } 
1

あなたが流れ、XmlReaderのようなビットとしてJSONを解析する(具体的なタイプとして、おそらくJsonTextReaderJsonReaderを使用することができますが失敗した場合は、自分でJSON文字列を解析する必要があります。ですから、例えば:あなたは常に、開始オブジェクトがあるように、プロパティ名を期待するのであれば

StartObject 

PropertyName 
parsingType 
String 
sometype 
PropertyName 
someothervalue 
Integer 
123 

Unhandled Exception: Newtonsoft.Json.JsonReaderException [...] 

、:

の出力を与えるあなたが提供してきましたJSON、オン
using System; 
using System.IO; 
using Newtonsoft.Json; 

public class Test 
{ 
    static void Main(string[] args) 
    { 
     using (var reader = new JsonTextReader(File.OpenText("test.json"))) 
     {    
      while (reader.Read()) 
      { 
       Console.WriteLine(reader.TokenType);     
       Console.WriteLine(reader.Value); 
      } 
     } 
    } 
} 

文字列のプロパティ値を使用している場合は、それが正しいかどうかを簡単に検証してプロパティ値を抽出できます。

関連する問題