2017-03-03 48 views
1

With Put and Get請求我收到應包含json字符串的字段的空字符串。C#Web Api獲取POST json作爲自定義字符串類型

例如: 我把下列JSON:

{ 
    "card": { 
    "foo": "bar", 
    "xyz": "dby" 
    } 
} 

現在,如果接收類有類型JObject中的一員,那麼它被正確如果更改映射

public class contact { 
    public int id { get; set; } 
    public string name { get; set; } 
    public JObject card { get; set; } 
} 

然而鍵入可以接收所有JTokens的自定義字符串類型:

public class contact { 
     public int id { get; set; } 
     public string name { get; set; } 
     public JsonString card { get; set; } //**Changed HERE**// 
    } 

然後,Put和Get方法都顯示空字符串。

JsonString看起來如下:

public class JsonString 
{ 
     private string _json; 

     public JsonString (string json) 
     { 
      this._json = json; 
     } 

     public string Value() 
     { 
      return _json; 
     } 

     public override int GetHashCode() 
     { 
      return _json.GetHashCode(); 
     } 

     public override bool Equals(object obj) 
     { 
      return (obj is JsonString) && this.GetHashCode() == obj.GetHashCode(); 
     } 
     public override string ToString() 
     { 
       return _json; 
     } 
} 

的jsonString類的更多,但可能沒有必要在這方面。任何想法爲什麼put/Get返回空字符串,我該如何解決這個問題?

編輯:

認沽看起來是這樣的:

[HttpPut] 
[Route("contacts/{contactid}")] 
public HttpResponseMessage update(int id, contact c) { 
contact.update(c); 
} 
+0

它不是真正的對你的問題的迴應,但如果你有時間看看Newtonsoft.Json,它很容易使用,併爲你提供正確的序列化和反序列化的對象向JSON和向後。 –

+0

你在你的'JsonString'中究竟做了什麼? – Coder

回答

0

JObject看起來是這樣的:

public class JObject : JContainer, IDictionary<string, JToken>, 
ICollection<KeyValuePair<string, JToken>>, IEnumerable<KeyValuePair<string, JToken>>, 
IEnumerable, INotifyPropertyChanged, ICustomTypeDescriptor, INotifyPropertyChanging 

什麼,你所得到的是隻是一個字符串,而JObject充當鍵值數據結構。

你不能像這樣映射它。 你可能對動態對象有更好的運氣,但它並不那麼簡單。

相關問題