2016-12-23 3 views
0

Ich versuche, die unter JsonProducing Json in richtigen Format

{ 
    "retailer": "The retailer", 
    "sites": [{ 
     "id": "1234", 
     "Sitename": "Microsoft", 
     "website": "www.microsoft.com" 
    }], 
    "Products": [{ 
     "Name": "Visual Studio", 
     "Year": "2017" 
    }] 
} 

Websites zu produzieren (Array, aber ich habe eine Liste verwendet). Produkte (array, aber ich habe eine Liste verwendet)

Mein Code (die die oben Json produzieren tut)

 Parent par = new Parent(); 
     List<Sites> parList = new List<Sites>(); 

     Sites site = new Sites(); 
     Software sw = new Software(); 
     List<Software> swList = new List<Software>(); 

     par.retailer = "The retailer"; 

     site.Id = "1234"; 
     site.Sitename = "Microsoft"; 
     site.Website = "www.microsoft.com"; 

     par.sites = parList; 

     sw.Name = "Visual Studio"; 
     sw.Year = DateTime.Year; 

     swList.Add(sw); 

     site.Products = swList; 

     parList.Add(site); 

     MemoryStream stream1 = new MemoryStream(); 
     DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Parent)); 

     ser.WriteObject(stream1, par); 

     stream1.Position = 0; 
     StreamReader sr = new StreamReader(stream1); 
     Console.WriteLine(op); 

Was ich tun müssen, ist die Json erzeugen (Daten aus einer Datenbank kommen, aber für jetzt habe ich hart die Werte kodiert) und die Post es zu einem Drittanbieter-Service, aber ich kann nicht bekommen, dass die Json in dem Format ich brauche? Wie könnte ich das erreichen?

+0

Einfach * nicht verwenden 'DataContractJsonSerializer'. Es wurde erstellt, bevor der JSON-Standard kristallisierte. Jeder und die ASP.NET-Web-API verwendet Json.NET. –

+0

Schlägst du vor, stattdessen https://json.codeplex.com/ – Computer

+0

@Computer Yeah serialisieren alle Dinge zu verwenden! Es ist viel besser und einfacher. –

Antwort

2

Für solche Sachen mag ich Websites, die JSON in Klassen konvertieren, dann wissen Sie genau, mit was Sie arbeiten.

Für Ihr Beispiel, ein wenig Google-Fu und ich bekomme diese Klassen.

public class Site 
{ 
    public string id { get; set; } 
    public string Sitename { get; set; } 
    public string website { get; set; } 
} 

public class Product 
{ 
    public string Name { get; set; } 
    public string Year { get; set; } 
} 

public class RootObject 
{ 
    public string retailer { get; set; } 
    public List<Site> sites { get; set; } 
    public List<Product> Products { get; set; } 
} 

Sie sollten nun in der Lage sein, die Daten in RootObject zu setzen und diese korrekt serialisiert werden.

+0

Das habe ich schon. Ich bin nicht sicher, was Sie vorschlagen, ich sollte ändern, wie ich bereits eine Instanz/Liste dieser Klassen, aber die Json ist falsch? – Computer

+0

Von was ich sehen kann, müssen Ihre Klassen falsch sein, Ihre Einstellung site.Products = swList; Von der JSON hat die Site keine Produkte, das Root-Objekt selbst - also Eltern in Ihrem Fall, ist das, was die Produkte direkt halten soll. – Monolithcode

+0

Sie waren damit auf dem richtigen Weg. Die Dokumentation, die ich gelesen habe, sagte RootObject: Händler - Firmenname, Websites - Array mit Ihrem Website-Namen, aber keine Erwähnung von Produkten. Wie haben Sie festgestellt, dass ich die Eigenschaftenliste hier einfügen musste? Ich bin neu in Json, aber alle Hinweise wären super. Will dies als Antwort markieren, sobald ich Ihre Antwort bekomme :-) – Computer

1

erstellen Klassen wie diese

public class Site 
{ 
    public string id { get; set; } 
    public string Sitename { get; set; } 
    public string website { get; set; } 
} 

public class Product 
{ 
    public string Name { get; set; } 
    public string Year { get; set; } 
} 

public class Example 
{ 
    public string retailer { get; set; } 
    public List<Site> sites { get; set; } 
    public List<Product> Products { get; set; } 
} 

und dann in die Objekte alle Ihre Daten legen wie dieses

Example par = new Example(); 
List<Site> parList = new List<Site>(); 
Site site = new Site(); 
Product sw = new Product(); 
List<Product> swList = new List<Product>(); 
par.retailer = "The retailer"; 
site.id = "1234"; 
site.Sitename = "Microsoft"; 
site.website = "www.microsoft.com"; 
par.sites = parList; 
sw.Name = "Visual Studio"; 
sw.Year = DateTime.Now.Year.ToString(); 
swList.Add(sw); 
par.Products = swList; 
parList.Add(site); 

dann serialisiert nur das Objekt mit Hilfe von Newtonsoft

string ser = JsonConvert.SerializeObject(par); 
Console.WriteLine(ser); 

So sieht ser

aus

Screenshot of <code>ser</code>

Verwandte Themen