可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am trying to serialize a C# object into a Json object. That will then be submitted to the Salesforce API, and create an application. Right now I have the C# object serialized into a Json string, but I need it to be an object.
Here is my C# object along with accompany serialization.
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;
I need the JSON string to output inside of a JSON Object. An example of what I need is below:
"{ \"jsonCreditApplication\" : " +
"\"gors_descr\" : \"Appliances\", " +
"\"b_name_first\" : \"Marisol\", " +
"\"b_name_last\" : \"Testcase\", " +
"}";
This hard coded json string is inside of an object. As it stands, the values in the C# object are being outputted into a JSON string, but I'm needing it output into an object so that the Salesforce API will accept the submission.
How can I append or insert the JSON string into an object?
回答1:
To create correct JSON first you need to prepare appropriate model. It can be something like that:
[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; }
}
To be able to use Data
attributes you will need to choose some other JSON serializer. For example DataContractJsonSerializer or Json.NET(I will use it in this example).
Customer customer = new Customer
{
ProductDescription = tbDescription.Text,
Fname = tbFName.Text,
Lname = tbLName.Text
};
string creditApplicationJson = JsonConvert.SerializeObject(
new
{
jsonCreditApplication = customer
});
So jsonCreditApplication
variable will be:
{
"jsonCreditApplication": {
"gors_descr": "Appliances",
"b_name_first": "Marisol",
"b_name_last": "Testcase"
}
}
回答2:
Another way.
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; }
}
}
and
/* 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
});
see
http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_JsonSerializerSettings.htm
My packages.config at the time of writing...though I'm sure future/latest versions will still support it:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net45" />
</packages>
回答3:
Install Newtonsoft.Json NuGet then decorate Customer class with the requires naming decorations to tell Json serializer how to serialize the customer class fields:
public class Customer
{
[JsonProperty("gors_descr")]
public string ProductDescription;
[JsonProperty("b_name_first")]
public string Fname;
[JsonProperty("b_name_last")]
public string Lname;
}
Next, serialize the object like this:
Customer application = new Customer
{
ProductDescription = "Appliances ",
Fname = "Marisol ",
Lname = "Testcase "
};
var JsonOutput = JsonConvert.SerializeObject(new { jsonCreditApplication = application });
You will get the desired result and the value of JsonOutput
will be :
"{\"jsonCreditApplication\":{\"gors_descr\":\"Appliances \",\"b_name_first\":\"Marisol \",\"b_name_last\":\"Testcase \"}}"
There are many ways to do this but I believe that this one is the simplest solution.
回答4:
You could use something like http://restsharp.org/, which is a c# library for REST. If so, it has a built in serializer for json objects (.addJsonBody()) or you can serialize it yourself and add with
request.AddParameter("application/json; charset=utf-8", json, ParameterType.RequestBody);
Alternatively if you want more control over it you can use
System.Net.HttpWebRequest()
I've also found https://github.com/ademargomes/JsonRequest, but it's still in development.
Be warned that if you use something like RestSharp, it is a canned request so any variation from what they have created as the standard requests (e.g. multipart/form data w/ json or custom headers or even custom authentication) may not work with their library, in which case it's probably better to make your own using HttpWebRequest anyway. Hope that helps!