2010-08-26 12 views
1

Je me suis cogné la tête contre le mur pendant un moment. Espérons que quelqu'un puisse signaler quelque chose de simple que je peux modifier pour que je puisse bouger à nouveau.Essayer de désérialiser JSON

Je me connecte à l'API WHM, et je ne peux absolument pas obtenir la réponse à désérialiser de JSON à un objet. J'ai essayé d'utiliser le JavaScriptSerializer, le DataContractJsonSerializer, et la bibliothèque de json.net qui flotte autour de là. Aucun d'entre eux ne semble fonctionner. Le code est trivial:

resp = req.GetResponse(); 
using (Stream stream = response.GetResponseStream()) 
    { 
     var serializer = new DataContractJsonSerializer(typeof(result)); 
     return (result)serializer.ReadObject(stream); 
    } 

est ici la classe pour contenir les données:

[DataContract] 
public class result 
{ 

    [DataMember(Name="options")] 
    public Dictionary<string, string> options { get; set; } 
    [DataMember(Name="rawout")] 
    public string rawout { get; set; } 
    [DataMember(Name="status")] 
    public bool status { get; set; } 
    [DataMember(Name="statusmsg")] 
    public string statusmsg { get; set; } 
} 

Et voici la version de série de ce qui revient sur le fil dans la réponse. Il est laid parce qu'il ya un bloc HTML géant au milieu de celui-ci:

"{\"result\":[{\"status\":1,\"statusmsg\":\"Account Creation Ok\",\"rawout\":\"<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Checking input data...System has 2 free ips.\\n...Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>WWWAcct 12.5.0 (c) 2010 cPanel, Inc....\\n\\nDns Zone check is enabled.\\n+===================================+\\n| New Account Info     |\\n+===================================+\\n| Domain: aaaaaaaa.com\\n| Ip: x.x.x.x (n)\\n| HasCgi: y\\n| UserName: aaaaaaaa\\n| PassWord: SkIs8_slgTbJPW\\n| CpanelMod: x3\\n| HomeRoot: /home\\n| Quota: 0 Meg\\n| NameServer1: x.com\\n| NameServer2: x.com\\n| NameServer3: \\n| NameServer4: \\n| Contact Email: \\n| Package: default\\n| Feature List: default\\n| Language: en\\n+=== 
================================+\\n...Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Running pre creation script (/scripts/prewwwacct)......Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Adding User...Removing Shell Access (n)\\n...Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Copying skel files from /home/teamroy/cpanel3-skel/ to /home/aaaaaaaa/......Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_12665789 
18/cjt/images/icons/success.png\\\"></td></tr></table>\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Adding Entries to httpd.conf......Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Setting up Mail & Local Domains...localdomains...valiases ...vdomainaliases...vfilters......Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Configuring DNS...Bind reconfiguring on fit using rndc\\n...Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\ 
\\"100%\\\"><pre>Restarting apache......Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\nChanging password for aaaaaaaa\\nPassword for aaaaaaaa has been changed\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Updating Authentication Databases...Updating ftp passwords for aaaaaaaa\\nFtp password files updated.\\nFtp vhost passwords synced\\n...Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Verifying MX Records and Setting up Databases...Reconfiguring Mail Routing:\\n<ul><li>LOCAL MAIL EXCHANGER: This server will serve as a primary mail exchanger for aaaaaaaa.com's mail.:<br /> This configuration has been manually selected.<br /><br /></li></ul>...Done</pre></td><td width=\\\"30\\\">< 
img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Setting up Proxy Subdomains......Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\nBind reloading on fit using rndc zone: [aaaaaaaa.com]\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Sending Account Information......Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\nSystem has 2 free ips.\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Running post creation scripts (/scripts/legacypostwwwacct, /scripts/postwwwacct, /scripts/postwwwacctuser)...\\nRunning postwwwacct...Checking Domain aaaaaaaa.com against domain blacklist\\n...Done</pr 
e></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\nwwwacct creation finished\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Setting up Domain Pointers......Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Setting Reseller Privs......Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\n<table style=\\\"border-bottom: 1px #ccc dotted;\\\"><tr><td width=\\\"100%\\\"><pre>Account Creation Complete!!!...Account Creation Ok...Done</pre></td><td width=\\\"30\\\"><img align=absmiddle src=\\\"/cPanel_magic_revision_1266578918/cjt/images/icons/success.png\\\"></td></tr></table>\\n\",\"options\":{\"nameser 
ver4\":null,\"nameserver\":\"x.com\",\"nameserverentry2\":null,\"nameserverentry3\":null,\"nameserverentry4\":null,\"nameserverentry\":null,\"ip\":\"x.x.x.x\",\"nameservera2\":null,\"nameservera3\":null,\"package\":\"default\",\"nameservera4\":null,\"nameserver2\":\"x.com\",\"nameservera\":null,\"nameserver3\":null}}]}" 

Modifier par Jacob:

est ici une représentation simplifiée du JSON.

{ 
    "result":[ 
     { 
      "status":1, 
      "statusmsg":"Account Creation Ok", 
      "rawout":"[html content]", 
      "options":{ 
       "nameserver4":null, 
       "nameserver":"x.com", 
       "nameserverentry2":null, 
       "nameserverentry3":null, 
       "nameserverentry4":null, 
       "nameserverentry":null, 
       "ip":"x.x.x.x", 
       "nameservera2":null, 
       "nameservera3":null, 
       "package":"default", 
       "nameservera4":null, 
       "nameserver2":"x.com", 
       "nameservera":null, 
       "nameserver3":null 
      } 
     } 
    ] 
} 
+0

En regardant le JSON simplifié, je n'arrive pas à comprendre comment le transformer en quelque chose d'utile en C#. – Jim

Répondre

2

Un problème que je vois est que status propriété est déclarée comme bool, alors qu'il est numérique en JSON. Essayez de le changer en int.

Même si la conversion réussit, elle échouera au moment de l'exécution. Le flux contient un objet qui contient un tableau de result s. Vous essayez de le convertir en result. Laissez-moi démontrer. Le JSON est quelque chose comme ceci simplifiée:

{ 
    result: [ 
    {options:{option1: value}, rawout: "HTML", statusmsg: "message", status: "status"} 
    ] 
} 

L'objet C# qu'il se traduirait par quelque chose comme ceci:

new object { 
    result = new IEnumerable<result> {new result{/*properties*/}} 
}; 

Ainsi, selon la bibliothèque que vous utilisez, vous devez deserialise JSON, Saisissez la valeur pointée par result et récupérez le premier élément. Ce serait ce que vous êtes après.

+0

Ok, je vois ce que vous dites. Ce qui est bizarre c'est que ça ne manque pas - c'est juste de me donner un objet sans aucune propriété. J'espérais une exception pour pouvoir travailler sur quelque chose, mais avec 0 feedback, il est difficile de résoudre le problème. – Jim

Questions connexes