2016-03-21 9 views
2

Ich brauche eine .net Objekt in dieses Format konvertieren:SerializeObject mit URL als root Attribut

{ 
     "http://www.example.com/extension/powered-by": { 
      "name": "Tin Can Engine", 
      "homePage": "../lrs-lms/lrs-for-lmss-home/", 
      "version": "2012.1.0.5039b" 
     } 
    } 

Wie kann ich diese mit JsonConvert.SerializeObject leicht tun und ein anonymes Objekt?

+0

Warum Sie eine URL als Schlüssel zu verwenden versuchen? Ich denke nicht, dass dies ein gültiger Schlüssel für eine JSON-Daten sein wird. –

+0

Alle diese 'Sonderzeichen' sind keine gültigen Zeichen in einem C# Variablennamen. Ihre einzige Option ist die Verwendung der Methode, die zu einem 'Dictionary ' –

+0

@CihanUygun serialisiert. Es ist eine TinCan API-Anforderung. – user1697748

Antwort

4

Sie können ein anonymes Objekt nicht verwenden, da Sie keine Eigenschaft in diesem Format haben können.

Allerdings können Sie verwenden ein Dictionary<string, object>:

Dictionary<string, object> root = new Dictionary<string, object>(); 
root.Add("http://www.example.com/extension/powered-by", new 
{ 
    name = "Tin Can Engine", 
    homePage = "../lrs-lms/lrs-for-lmss-home/", 
    version = "2012.1.0.5039b" 
}); 
string json = JsonConvert.SerializeObject(root); 
+0

Hier ist Ihr Code läuft auf DotNetFiddle (mit einer kleinen Änderung um "nette" json zu machen): https://dotnetfiddle.net/xzcEn3 – AndyJ

+0

Auch ein guter Ansatz, um eine JSON-Ausgabe zu erstellen –

0

Sie können Eigenschaftsnamen-Attribut für Json.NET verwenden, aber nicht sicher, ob dies ist, was Sie suchen. Können Sie die Klassenstruktur wie unten versuchen?

public class RootObject { 
    [JsonProperty(PropertyName = "http://www.example.com/extension/powered-by")] 
    public TinCanObject tinCanObject {get;set;} 
} 

public class TinCanObject { 
    public string name {get;set;} 
    public string home {get;set;} 
    public string version {get;set;} 
} 

RootObject rootObject = new RootObject(); 
rootObject.tinCanObject = new TinCanObject(); 
rootObject.tinCanObject.name = "Tin Can Engine"; 
rootObject.tinCanObject.home = "../lrs-lms/lrs-for-lmss-home/"; 
rootObject.tinCanObject.version = "2012.1.0.5039b"; 

string result = JsonConvert.SerializeObject(rootObject); 

hoffe, das hilft