2017-08-13 117 views
0

我通過POST檢索以下JSON通過API如何創建一個詞典<字符串,字符串>嵌套對象

{ 
    "State":"Andhra_Pradesh", 
    "District":"Guntur", 
    "Fact":"SELECT", 
    "Description":"", 
    "FactDate":"", 
    "FactNumber":"", 
    "FactType":"SELECT", 
    "Fact":{"Id":"1"} 
} 

我能夠執行通過JavaScript Ajax請求,但我也希望通過C#代碼來使用API​​。

我正在使用下面的代碼,但我不太確定如何添加事實對象?

var values = new Dictionary<string, string> 
      { 
       { "State", selectedState }, 
       { "District", selectedDistrict }, 
       { "Fact", ""}, 
       { "FactType", ""}, 
       { "FactNumber", ""}, 
       { "Description", ""}, 
       {"Fact", "{Id,1}" }, 
       {"FactDate", factDate.Date.ToString() } 
      }; 

using (var httpClient = new HttpClient()) 
       { 
var content = new FormUrlEncodedContent(values); 
var response = await httpClient.PostAsync("http://api.in/" + "test", content); 
} 

如何將Fact對象添加到Dictionary?

+0

我不熟悉這個領域,但我想你應該寫' 「{ID:1}」',而不是' 「{ID,1}」'? – Sweeper

+0

你問的是不是不可能的,但我建議不要在這裏使用'Dictionary '。一旦你的JSON對象不再只是一個平坦的屬性列表,並開始嵌套屬性等,你會更好的定義一個自定義的類,以匹配你期望的JSON對象。這也消除了通過索引(字符串)查找來查找屬性的需要,並使得它們可以通過定義的屬性直接訪問。您目前的問題可以得到解答,但在您的情況下,這似乎是一個糟糕的方法。 – Flater

+0

爲什麼不使用Json格式? – Valkyrie

回答

4

在使用httpclient之前,您可能需要將要發送的數據定義爲實際類。

如果您只有名稱值對,那麼您可以使用NameValueCollection並作爲formurlencoded發送,但由於您有複雜類型,因此您可以在下面考慮這一點。

見下文。

public class Rootobject 
{ 
    public string State { get; set; } 
    public string District { get; set; } 
    public Fact Fact { get; set; } 
    public string Description { get; set; } 
    public string CaseDate { get; set; } 
    public string FactNumber { get; set; } 
    public string FactType { get; set; } 
} 

public class Fact 
{ 
    public string Id { get; set; } 
} 

用法如下。一定要包括到System.Net.Http.Formatting.dll

var client = new HttpClient(); 

    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 


    var model = new Rootobject { State = "Andhra_Pradesh", District = "Guntur", FactType = "SELECT", Description = "", CaseDate = "", FactNumber = "", Fact = new Fact { Id = "1"} }; 

    var data = await client.PostAsJsonAsync("http://api.in/" + "test", model); 
0

我認爲這僅僅是一個JSON對象,您可以創建具有的(國家,地區等)相同屬性的類,並使用json serializer

,或者您可以使用創建JObjectJson.Net

0

參考您可以使用Newtonsonft.Json向serializaton /反序列化的工作,代碼會這樣。

public class Rootobject 
    { 
     [JsonProperty("State")] 
     public string State { get; set; } 
     [JsonProperty("District")] 
     public string District { get; set; } 
     [JsonProperty("Fact")] 
     public Fact Fact { get; set; } 
     [JsonProperty("Description")] 
     public string Description { get; set; } 
     [JsonProperty("CaseDate")] 
     public string CaseDate { get; set; } 
     [JsonProperty("FactNumber")] 
     public string FactNumber { get; set; } 
     [JsonProperty("FactType")] 
     public string FactType { get; set; } 
    } 

    public class Fact 
    { 
     [JsonProperty("Id")] 
     public string Id { get; set; } 
    } 

然後,在安裝好對象之後,將其序列化。

Rootobject example = new Rootobject(); 
//Add values to the variable example. 
var objectSerialized = JsonConvert.SerializeObject(example); 

之後,你將有一個json準備發送到任何你想要的地方。

0

只要改變{"Fact", "{Id,1}" }{"Fact.Id", "1" },

相關問題