2017-03-03 2 views
1

PutGet 요청 json 문자열을 포함해야하는 필드에 대해 빈 문자열을받습니다.C# Web Api 사용자 지정 문자열 형식으로 json POST를 받았습니다.

예를 들어

: 나는 다음과 같은 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이 빈 문자열을 반환하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

편집 :

풋은 다음과 같습니다

하는 jobject는 다음과 같습니다
[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 

는 당신이있어하는 것은, 단지 문자열 키 - 값 데이터 구조.

이렇게 매핑 할 수는 없습니다. 동적 객체를 사용하면 더 나은 행운을 누릴 수 있지만 그렇게 간단하지는 않습니다.