Ich versuche, ein C # -Objekt in ein Json-Objekt zu serialisieren. Diese wird dann an die Salesforce-API übermittelt und eine Anwendung erstellt. Im Moment habe ich das C # -Objekt in einen Json-String serialisiert, aber ich brauche es, um ein Objekt zu sein.
Hier ist mein C # -Objekt zusammen mit begleitender Serialisierung.
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;
Ich brauche die JSON-Zeichenfolge, um ein JSON-Objekt auszugeben. Ein Beispiel für das, was ich brauche, ist unten:
"{ \"jsonCreditApplication\" : " +
"\"gors_descr\" : \"Appliances\", " +
"\"b_name_first\" : \"Marisol\", " +
"\"b_name_last\" : \"Testcase\", " +
"}";
Diese hart codierte Json-Zeichenfolge befindet sich innerhalb eines Objekts. So wie es aussieht, werden die Werte im C # -Objekt in eine JSON-Zeichenfolge ausgegeben, aber ich muss sie in ein Objekt ausgeben, damit die Salesforce-API die Übergabe akzeptiert.
Wie kann ich den JSON-String an ein Objekt anhängen oder einfügen?
Um korrektes JSON zu erstellen, müssen Sie das entsprechende Modell vorbereiten. Es kann so etwas sein:
[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; }
}
Um Data
-Attribute verwenden zu können, müssen Sie einen anderen JSON-Serializer auswählen. Zum Beispiel DataContractJsonSerializer oder Json.NET (ich werde es in diesem Beispiel verwenden).
Customer customer = new Customer
{
ProductDescription = tbDescription.Text,
Fname = tbFName.Text,
Lname = tbLName.Text
};
string creditApplicationJson = JsonConvert.SerializeObject(
new
{
jsonCreditApplication = customer
});
Die Variable jsonCreditApplication
lautet also:
{
"jsonCreditApplication": {
"gors_descr": "Appliances",
"b_name_first": "Marisol",
"b_name_last": "Testcase"
}
}
Ein anderer Weg.
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; }
}
}
und
/* 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
});
sehen
http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_JsonSerializerSettings.htm
Meine packages.config zum Zeitpunkt des Schreibens ... obwohl ich sicher bin, dass zukünftige/neueste Versionen dies weiterhin unterstützen werden:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net45" />
</packages>
Installieren Sie Newtonsoft.Json NuGet, und dekorieren Sie die Customer-Klasse mit den erforderlichen Benennungsdekorationen, um dem Json-Serializer mitzuteilen, wie die Felder der Kundenklassen serialisiert werden:
public class Customer
{
[JsonProperty("gors_descr")]
public string ProductDescription;
[JsonProperty("b_name_first")]
public string Fname;
[JsonProperty("b_name_last")]
public string Lname;
}
Als nächstes serialisieren Sie das Objekt folgendermaßen:
Customer application = new Customer
{
ProductDescription = "Appliances ",
Fname = "Marisol ",
Lname = "Testcase "
};
var JsonOutput = JsonConvert.SerializeObject(new { jsonCreditApplication = application });
Sie erhalten das gewünschte Ergebnis und der Wert von JsonOutput
lautet: "{\"jsonCreditApplication\":{\"gors_descr\":\"Appliances \",\"b_name_first\":\"Marisol \",\"b_name_last\":\"Testcase \"}}"
Es gibt viele Möglichkeiten, dies zu tun, aber ich glaube, dass dies die einfachste Lösung ist.
Sie könnten etwas wie http://restsharp.org/ verwenden, eine C # -Bibliothek für REST. Wenn ja, hat es einen eingebauten Serializer für Json-Objekte (.addJsonBody ()) oder Sie können es selbst serialisieren und mit hinzufügen
request.AddParameter("application/json; charset=utf-8", json, ParameterType.RequestBody);
Wenn Sie mehr Kontrolle darüber haben möchten, können Sie es auch verwenden
System.Net.HttpWebRequest()
Ich habe auch https://github.com/ademargomes/JsonRequest gefunden, aber es ist noch in der Entwicklung .. __ Seien Sie gewarnt, wenn Sie so etwas wie RestSharp verwenden, ist dies eine abgefragte Anforderung, also jede Variation davon Sie wurden als Standardanforderungen erstellt (z. B. Multipart-/Formulardaten mit benutzerdefinierten Kopfzeilen oder sogar benutzerdefinierte Authentifizierung) funktionieren möglicherweise nicht mit ihrer Bibliothek. In diesem Fall ist es wahrscheinlich besser, mit HttpWebRequest eigene Anforderungen zu erstellen. Hoffentlich hilft das!