2016-04-01 16 views
1
public class Rootobject 
{ 
    public EnPickthall enpickthall { get; set; } 
} 

public class EnPickthall 
{ 
    public _1 _1 { get; set; } 
    public _2 _2 { get; set; } 
    public _3 _3 { get; set; } 
    public _4 _4 { get; set; } 
    /* This goes on*/ 
    public _6236 _6236 { get; set;} 
} 

//For Each of the above properties a separate class has been defined: 
public class _1 
{ 
public int id { get; set; } 
public int surah { get; set; } 
public int ayah { get; set; } 
public string verse { get; set; } 
} 

public class _2 
{ 
public int id { get; set; } 
public int surah { get; set; } 
public int ayah { get; set; } 
public string verse { get; set; } 
} 
/* So On for all the properties */ 

JSON2CSHARPでこれを取得しました。 私は彼らの「Surah」に基づいて、すべての詩を取得するので、多くのプロパティを使用している場合私の問題がある。ここC#を使用して複合JSONを逆シリアル化する

私はすべての詩のために別々のクラスを持っているEnPickthallクラスの本を持っている非常に難しい&非現実的です。ここにあるすべての詩はそれ自身の授業を持っています。

私は何時間もStack Overflowを掃除しています。このJSONクラスを単純化する方法はありますか?

オブジェクトモデルを作成するマイコード:

 var serializer = new DataContractJsonSerializer(typeof(RootObject_Quran)); 
     var result= App_Code.FileIOHelper.ReadFromDefaultFile("ms-appx:///Assets/en.pickthall.json"); 

     var ms = new MemoryStream(Encoding.UTF8.GetBytes(result)); 

     var data = (RootObject_Quran)serializer.ReadObject(ms); 

私のJSONファイルのリンク:

+2

を簡素化する方法はたくさんありますが、まさにあなたが達成しようとしていますか?あなたのコードを少し説明できますか?プロパティは何ですか:public _1 _1 {get;セット; } ために ?彼らは自分のクラスで属性にする必要がありますか?リストのタイプで十分ではないでしょうか?辞書、ハッシュテーブル、または普通のリスト? – Nobody

+0

@Nobody実際、これは私のHDDのJSON形式で保存された宗教的な本です.JSON2Csharpを使って直接Classes for itを生成し、各詩はクラスEnPickthallの別のプロパティとして格納されます。そして、すべての詩はそれ自身のid、Surah(章)、Aya(詩数)&Verse(詩の内容)を持っています –

+1

なぜpublic class EnPickthall {公開リスト詩{get;セット; } 'と' publicクラスVerse {public int id {get;セット; } ...} '? – Bardicer

答えて

0


[JsonProperty(PropertyName意味= " en.pickthall ")]
公共辞書picthall {取得;セット;}

public class VerseObject 
    { 

     [JsonProperty(PropertyName = "en.pickthall")] 
     public Dictionary<int, Data> picthall {get;set;} 


    } 
    public class Data 
    { 
     [JsonProperty(PropertyName = "id")] 
     public int id; 
     [JsonProperty(PropertyName = "surah")] 
     public int surah; 
     [JsonProperty(PropertyName = "ayah")] 
     public int ayah; 
     [JsonProperty(PropertyName = "verse")] 
     public string verse; 

    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<Data> v = new List<Data>(); 
      using (StreamReader rdr = new StreamReader(@"C:\Temp\en.pickthall.json")) 
      { 
       var str = rdr.ReadToEnd(); 
       var jsn = JsonConvert.DeserializeObject<VerseObject>(str); 
       foreach(var item in jsn.picthall.Select(x=>x.Value)) 
       { 
        v.Add(item); 
       } 
       Console.ReadLine(); 
      } 
     } 


    } 
1

http://globalquran.com/download/data/download.php?data_by=json&quran_by_id[]=en.pickthallちょうど詩と呼ばれる単一のクラスを持っています。

public class Verse { 
    public int SurahId { get; set; } 

    public int AyaId { get; set; } 

    public String Text { get; set; } 
} 

surah/ayaの組み合わせが詩を一意に識別するのに十分であるため、実際には各詩にキーは必要ありません。

これにより、シリアライズ/デシリアライズが容易になります。また、SurahとAyaを注文することで、コーラン全体に簡単に集めることができます。 LINQを使用して、書籍全体を上記の状態で並べ替えることができます。あるいは、検索基準に基づいて、そこからもパッセージを収集することは非常に簡単です。 27:18-20 JSONは私がクラスを作ったので、ID番号のようなプロパティに再び全データラッパよりプロパティen.pickthallとネストとそのクラスがデータと数字を処理する辞書を有する

+0

このアプローチで問題が発生しているのは、正しいJson応答Enpickthall型のプロパティは常にnullです –

+0

手動のシリアル化/逆シリアル化を少し行う必要があります。次のようなことをする必要があります。 deserialized = JsonConvert.DeserializeObject (JsonStringOftheVerseObjects); 見てください:http://www.newtonsoft.com/json – Nobody

+0

これは単なる詩オブジェクトの配列です。詩には親のSurah/Ayaコンボをキーとして含めることができます。シンプル。 LINQ: – ManoDestra

関連する問題