it-swarm.com.de

Konvertieren Sie das C # -Objekt in ein Json-Objekt

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? 

7
Mowrite

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"
  }
}
15

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>
2
granadaCoder

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.

1
Zuhair

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!

0
Benj Arnopp