2016-01-18 33 views
7

Sto tentando di serializzare un oggetto C# in un oggetto Json. Questo verrà quindi inviato all'API Salesforce e verrà creata un'applicazione. In questo momento ho l'oggetto C# serializzato in una stringa Json, ma ho bisogno che sia un oggetto.Converti oggetto C# in oggetto Json

Ecco il mio oggetto C# insieme alla serializzazione di accompagnamento.

Customer application = new Customer { 
    ProductDescription = "gors_descr " + tbDescription.Text, 
    Fname = "b_name_first " + tbFName.Text, 
    Lname = "b_name_last " + tbLName.Text 
}; 

var json = new System.Web.Script.Serialization.JavaScriptSerializer(); 
string jsonString = json.Serialize(application); 

string endPoint = token.instance_url + "/services/apexrest/submitApplication/";  
string response = conn.HttpPost(endPoint, json, token); 
Literal rLiteral = this.FindControl("resultLiteral") as Literal; 

Ho bisogno della stringa JSON per l'output all'interno di un oggetto JSON. Di seguito è riportato un esempio di ciò di cui ho bisogno:

"{ \"jsonCreditApplication\" : " + 
    "\"gors_descr\" : \"Appliances\", " + 
    "\"b_name_first\" : \"Marisol\", " + 
    "\"b_name_last\" : \"Testcase\", " + 
"}"; 

Questa stringa json hard codificata si trova all'interno di un oggetto. Così com'è, i valori nell'oggetto C# vengono emessi in una stringa JSON, ma ho bisogno che venga emesso in un oggetto in modo che l'API Salesforce accetti l'invio.

Come aggiungere o inserire la stringa JSON in un oggetto?

+0

http://stackoverflow.com/questions/45015/safely-turning-a-json-string-into-an-object?rq=1? – stuartd

+0

per i principianti assicurati che la tua stringa json sia valida puoi effettivamente utilizzare questo sito per convertire la stringa json nella classe C# http://json2csharp.com/, guarda anche questo link a [converti oggetto C# in Json] (http: // stackoverflow.com/questions/6201529/turn-c-sharp-object-into-a-json-string-in-net-4) – MethodMan

+0

Prima di tutto quando si serializza l'applicazione, si otterrà JSON che avrà il seguente aspetto: {"ProductDescription": "Gors_descr Appliances", "Fname": "b_name_first Marisol", ...} '. Non sembra il JSON che desideri. –

risposta

11

Per creare correttamente JSON, è necessario preparare il modello appropriato. Può essere qualcosa di simile:

[DataContract] 
public class Customer 
{ 
    [DataMember(Name = "gors_descr")] 
    public string ProductDescription { get; set; } 

    [DataMember(Name = "b_name_first")] 
    public string Fname { get; set; } 

    [DataMember(Name = "b_name_last")] 
    public string Lname { get; set; } 
} 

Per poter utilizzare Data attributi che sarà necessario scegliere qualche altro serializzatore JSON. Ad esempio DataContractJsonSerializer o Json.NET (lo userò in questo esempio).

Customer customer = new Customer 
{ 
    ProductDescription = tbDescription.Text, 
    Fname = tbFName.Text, 
    Lname = tbLName.Text 
}; 


string creditApplicationJson = JsonConvert.SerializeObject(
    new 
    { 
     jsonCreditApplication = customer 
    }); 

Così jsonCreditApplication variabile sarà:

{ 
    "jsonCreditApplication": { 
    "gors_descr": "Appliances", 
    "b_name_first": "Marisol", 
    "b_name_last": "Testcase" 
    } 
} 
+0

Questo anwser è stato fantastico! grazie –

0

È possibile utilizzare qualcosa come http://restsharp.org/, che è una libreria C# per REST. Se è così, si è dotato di un serializzatore per gli oggetti JSON (.addJsonBody()) oppure è possibile serializzare voi stessi e aggiungere con

request.AddParameter("application/json; charset=utf-8", json, ParameterType.RequestBody); 

In alternativa, se si vuole più controllo su di esso è possibile utilizzare

System.Net.HttpWebRequest() 

Ho anche trovato https://github.com/ademargomes/JsonRequest, ma è ancora in sviluppo. Stai attento che se usi qualcosa come RestSharp, è una richiesta predefinita quindi qualsiasi variazione da ciò che hanno creato come richieste standard (es. Dati multipart/form w/json o intestazioni personalizzate o persino autenticazione personalizzata) potrebbe non funzionare con i loro libreria, nel qual caso è probabilmente meglio crearne di propri usando comunque HttpWebRequest. Spero possa aiutare!

2

Un altro modo.

using System; 
using Newtonsoft.Json; 

namespace MyNamepace 
{ 
    public class MyCustomObject 
    { 
     public MyCustomObject() 
     { 
     } 

     [JsonProperty(PropertyName = "my_int_one")] 
     public int MyIntOne { get; set; } 

     [JsonProperty(PropertyName = "my_bool_one")] 
     public bool MyBoolOne { get; set; } 

    } 
} 

e

 /* using Newtonsoft.Json; */ 

     MyCustomObject myobj = MyCustomObject(); 
     myobj.MyIntOne = 123; 
     myobj.MyBoolOne = false; 

     string jsonString = JsonConvert.SerializeObject(
      myobj, 
      Formatting.None, 
      new JsonSerializerSettings() 
      { 
       ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore 
      }); 

vedere

http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_JsonSerializerSettings.htm

mio packages.config al momento della scrittura ... anche se sono sicuro future/ultime versioni saranno ancora sostenerlo :

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net45" /> 
</packages> 
+0

+1 per l'utilizzo della soluzione Newonsoft. Ricorda che per utilizzarlo è necessario installare il pacchetto utilizzando NuGet Package Manager e (ovviamente) includere Newtonsoft.Json nella sezione "utilizzo" –

+1

Hey. Grazie per il feedback. Ho aggiunto il pacchetto packages.config. Il "usando" era già lì! :) – granadaCoder