2016-01-18 38 views
7

Tôi đang cố gắng tuần tự hóa đối tượng C# thành đối tượng Json. Sau đó, nó sẽ được gửi đến API Salesforce và tạo một ứng dụng. Ngay bây giờ tôi có đối tượng C# được tuần tự hóa thành một chuỗi Json, nhưng tôi cần nó là một đối tượng.Chuyển đổi đối tượng C# thành đối tượng Json

Đây là đối tượng C# của tôi cùng với tuần tự đi kèm.

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; 

Tôi cần chuỗi JSON để xuất bên trong đối tượng JSON. Ví dụ về những gì tôi cần là bên dưới:

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

Chuỗi json được mã hóa cứng này nằm bên trong một đối tượng. Khi nó đứng, các giá trị trong đối tượng C# đang được xuất thành một chuỗi JSON, nhưng tôi cần nó xuất thành một đối tượng để API Salesforce chấp nhận việc gửi.

Làm cách nào để thêm hoặc chèn chuỗi JSON vào đối tượng?

+0

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

+0

để bắt đầu đảm bảo rằng chuỗi json của bạn là hợp lệ, bạn thực sự có thể sử dụng trang web này để chuyển đổi chuỗi json thành C# Class http://json2csharp.com/ cũng xem liên kết này để [chuyển đổi C# Object thành Json] (http: // stackoverflow.com/questions/6201529/turn-c-sharp-object-into-a-json-string-in-net-4) – MethodMan

+0

Trước hết khi bạn tuần tự hóa 'ứng dụng', bạn sẽ nhận được JSON trông giống như sau:' {"ProductDescription": "gors_descr Appliances", "Fname": "b_name_first Marisol", ...} '. Nó không giống như JSON bạn muốn. –

Trả lời

11

Để tạo JSON đúng trước, bạn cần chuẩn bị mô hình phù hợp. Nó có thể là một cái gì đó như thế:

[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; } 
} 

Để có thể sử dụng Data thuộc tính bạn sẽ cần phải chọn một số serializer JSON khác. Ví dụ: DataContractJsonSerializer hoặc Json.NET (Tôi sẽ sử dụng nó trong ví dụ này).

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


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

Vì vậy jsonCreditApplication biến sẽ là:

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

Anwser này là tuyệt vời! cảm ơn –

0

Bạn có thể sử dụng một cái gì đó như http://restsharp.org/, thư viện C# cho REST. Nếu vậy, nó đã tích hợp sẵn trong serializer cho các đối tượng json (.addJsonBody()) hoặc bạn có thể serialize đó cho mình và thêm với

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

Ngoài ra nếu bạn muốn kiểm soát nhiều hơn nó, bạn có thể sử dụng

System.Net.HttpWebRequest() 

Tôi cũng đã tìm thấy https://github.com/ademargomes/JsonRequest nhưng vẫn đang được phát triển. Được cảnh báo rằng nếu bạn sử dụng một cái gì đó như RestSharp, nó là một yêu cầu đóng hộp vì vậy bất kỳ biến thể nào từ những gì chúng tạo ra như yêu cầu chuẩn (ví dụ: dữ liệu đa phần/biểu mẫu w/json hoặc tiêu đề tùy chỉnh hoặc thậm chí tùy chỉnh xác thực) có thể không hoạt động thư viện, trong trường hợp đó nó có thể tốt hơn để làm của riêng bạn bằng cách sử dụng HttpWebRequest anyway. Hy vọng rằng sẽ giúp!

2

Một cách khác.

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; } 

    } 
} 

 /* 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 
      }); 

thấy

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

packages.config của tôi tại thời điểm viết bài ... mặc dù tôi chắc chắn rằng trong tương lai/phiên bản mới nhất vẫn sẽ hỗ trợ nó :

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

1 để sử dụng giải pháp Newonsoft - Chỉ cần nhớ rằng để sử dụng nó, bạn cần phải cài đặt gói của nó bằng cách sử dụng NuGet Package Manager, và (tất nhiên) bao gồm Newtonsoft.Json tại phần "sử dụng" của bạn –

+1

Hey. Cảm ơn phản hồi. Tôi đã thêm packages.config. "Sử dụng" đã có! :) – granadaCoder

Các vấn đề liên quan