2016-04-01 1 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 */ 

Ich habe dies über JSON2CSHARP! Mein Problem ist, wenn ich so viele Eigenschaften beschäftigen alle Verse das Abrufen auf der Grundlage ihrer „Sura“ wäre sehr schwierig & ImpracticalDeserialisieren von komplexen JSON mit C#

Hier habe ich ein Buch in EnPickthall Klasse, die für jeden Vers eine separate Klasse hat. Jeder Vers hat hier seine eigene Klasse.

Ich habe Stack Overflow stundenlang geplündert. Gibt es eine Möglichkeit, wie ich diese JSON-Klassen vereinfachen könnte.

Mein Code Erstellen des Objektmodells:

 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); 

Meine JSON Datei: http://globalquran.com/download/data/download.php?data_by=json&quran_by_id[]=en.pickthall

+2

Es gibt eine Menge von Möglichkeiten zu vereinfachen, aber was genau wollen Sie erreichen? Können Sie Ihren Code ein wenig erklären? Was sind die Eigenschaften: public _1 _1 {get; einstellen; } zum ? Müssen sie Attribute mit eigenen Klassen sein? Würde eine Art Liste nicht ausreichen? Ein Wörterbuch, Hash-Tabelle oder nur eine normale Liste ? – Nobody

+0

@Nobody Eigentlich ist dies ein religiöses Buch, das im JSON-Format auf meiner Festplatte gespeichert ist. Ich generierte direkt Klassen mit JSON2CSharp, wobei jeder Vers als separate Eigenschaft in der Klasse EnPickthall gespeichert wird. Und jeder Vers hat seine eigene ID, Sure (Kapitel), Aya (Verszahl) & Vers (Inhalt des Verses) –

+1

Warum nicht? Öffentliche Klasse EnPickthall {public List Verse {get; einstellen; } 'und' public class Verse {public int id {get; einstellen; } ...}? – Bardicer

Antwort

0

Json mit Eigentum en.pickthall als alle Daten Wrapper wieder in Eigentum wie ID-Nummern verschachtelt ist, so dass ich Klasse gemacht und diese Klasse hat Dictionary Daten und Zahlen
[JsonProperty (Propertyname = "zu handhaben en.pickthall ")]
öffentlichen Wörterbuch Picthall {get; set;}

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

nur eine einzige Klasse haben Verse genannt.

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

    public int AyaId { get; set; } 

    public String Text { get; set; } 
} 

Sie nicht wirklich brauchen einen Schlüssel für jeden Vers, wie die surah/Aya Kombination ausreichend ist, um eindeutig einen Vers zu identifizieren.

Dies ermöglicht eine einfache Serialisierung/Deserialisierung und ermöglicht auch eine einfache Sammlung in den gesamten Koran, indem Sie auf Surah und Aya bestellen. Sie könnten dann einfach LINQ verwenden, um das gesamte Buch wieder zusammenzusetzen, geordnet wie oben. Oder es wäre unglaublich einfach, auch Passagen daraus zu sammeln, basierend auf einem Suchkriterium, z.B. 27: 18-20

+0

das Problem, das ich mit diesem Ansatz habe, ist, dass, obwohl ich die richtige Json Antwort bekomme , die Enpickthall-Eigenschaft ist immer null –

+0

Sie müssen ein bisschen manuelle Serialisierung/Deserialisierung durchführen. Sie müssten so etwas tun: deserialized = JsonConvert.DeserializeObject (JsonStringOftheVerseObjects); Werfen Sie einen Blick auf: http://www.newtonsoft.com/json – Nobody

+0

Es ist einfach eine Reihe von Vers-Objekten. Der Vers kann seine Eltern-Sura/Aya-Kombination als Schlüssel enthalten. Einfach. Keine Notwendigkeit für etwas anderes, da sie leicht aus den Versen selbst mit LINQ abgeleitet werden können :) – ManoDestra

Verwandte Themen