2016-04-13 14 views
2

Sadece ilk Mülkün ortak olduğu tonlarca farklı jale ayrışıyorum. Bu ilk özelliğin değerine bağlı olarak json'u farklı nesneye ayırdım ve olası hatayı farklı şekilde ele aldım. Ancak json geçerli değil ama hala ilk özellik değerini bilmek istiyorum (bu geçerli olduğu sürece) böylece ayrıştırma hatasıyla başa çıkabilirim. Bu, Json.Net ile mümkün olup olmadığını merak ediyordum. Tabii ki örneğin en azından böylesi ilk özellik geçerli olduğunu, bir şey varsayalım:Json geçerli olmasa bile ilk Mülkiyet Nasıl Ayrılır?

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

Denedim aşağıdaki ancak .Parse kullanırken istisnası atılır beri hiçbir sonuç almak:

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

Sadece bu değerle ilgilendiğiniz için, neden ayrıştırma zahmetine giriyor? Sadece bir dize araması yapın. Daha hızlı olacak. – Transcendental

+0

JSON ile tam olarak ne yapıyorsunuz? Ya da onu nereden alıyorsunuz? Kendi uygulamanızdan veya hizmetinizden geliyorsa, 'TypeNameHandling.All' ve 'FormatterAssemblyStyle.Simple 'işlevlerini kullanarak' JsonSerializerSettings' komutunu ekleyebilir ve bu da Desperizatörün montajınızda doğru tipi tanımasını ve bulmasını sağlar. – rinukkusu

+0

Bir JsonReader'ı şu şekilde gösterildiği gibi kullanmayı deneyin: [Geçersiz bir jsonu nasıl deserialize edebilirim? Nesnelerin kesilmiş listesi] (http://stackoverflow.com/q/36576928/10263) –

cevap

1

Herhangi bir ayrıştırma motorunun json'u kısmen ayrıştırdığını düşünmüyorum. ayrıştırıcı

 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

Bir dere, XmlReader gibi biraz olarak JSON ayrıştırmak için (beton türü olarak muhtemelen JsonTextReader) bir JsonReader kullanabilirsiniz başarısız olursa kendiniz için json dizesi ayrıştırmak zorunda kalacaktır. Yani, örneğin: o zaman her zaman, bir başlangıç ​​nesnesi olacaksa o zaman bir özellik adını bekliyoruz Yani

StartObject 

PropertyName 
parsingType 
String 
sometype 
PropertyName 
someothervalue 
Integer 
123 

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

:

çıktısını verecektir sağladığınız JSON'dan günü
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); 
      } 
     } 
    } 
} 

Bir string özellik değeri, bu durumda bunu kolayca doğrulayabilir ve özellik değerini ayıklayabilirsiniz.

İlgili konular