2017-03-03 6 views
1

PutGetリクエストjson文字列を含むフィールドに空の文字列を受け取ります。例えばC#Web Api GET POST jsonをカスタム文字列型として使用する

: 私は、次のJSONを入れて:受信クラスはタイプjオブジェクトのメンバーを持っている場合、私は変更する場合

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

は今、それはしかし正しく

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メソッドの両方が空の文字列を表示します。より

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クラスを、おそらくこのような状況では必要ありません:

JsonStringは、次のようにのように見えます。 put/Getが空の文字列を返す理由と解決方法

EDIT:

入れは、次のようになります。

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

これはあなたの問題に対する実際の応答ではありませんが、Newtonsoft.Jsonを見てみると使いやすく、jsonやbackwardsへのオブジェクトのシリアル化と逆シリアル化を修正することができます。 –

+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として働きながら、何を持っていることは、単なる文字列でありますキー値データ構造。

このようにマップすることはできません。 あなたは動的オブジェクトで運が良いかもしれませんが、まだそれほど単純ではありません。

関連する問題