2012-07-30 55 views
1

我正在开发一个wcf-web服务。消费者可以选择原子响应和json响应。wcf json-response Array/List

我的OperationContract的是这样的:

[OperationContract] 
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "json/json")] 
    Result GetData(); 

的结果类型包含了一些字符串和项的数组。

[DataContract] 
public class Result 
{ 
    [DataMember] 
    public string baseUrl; 
    [DataMember] 
    public string url; 
    [DataMember] 
    public string title; 
    [DataMember] 
    public int totalResults; 
    [DataMember] 
    public JsonEntries[] resources; 
} 

我标志着JsonEntries也为DataContract:

[DataContract] 
public class JsonEntries 
{ 
    [DataMember] 
    public string updated; 
    [DataMember] 
    public string key; 
    [DataMember] 
    public string title; 
    [DataMember] 
    public Salary salarie; 
} 

然而,当我试图运行此我得到的错误,该元数据不能被调用。当我在数组前面删除[DataMember]时,我没有遇到任何错误,但我的响应不包含数组。 我已经看到它在各种exmaples上这样工作。那么我做错了什么?

在此先感谢。

robidd

回答

2

应该工作,这是我的代码示例

DataContracts

[DataContract] 
public class Result 
{ 
    [DataMember] 
    public int totalResults; 
    [DataMember] 
    public JsonEntries[] resources; 
} 

[DataContract] 
public class JsonEntries 
{ 
    [DataMember] 
    public string title; 
} 

OperationContract的

[OperationContract] 
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "getdata")] 
Result GetData(); 

    public Result GetData() 
    { 
     var jsonEntries = new List<JsonEntries> 
      { 
       new JsonEntries {title = "1"}, 
       new JsonEntries {title = "2"}, 
       new JsonEntries {title = "3"} 
      }.ToArray(); 
     return new Result 
     { 
      resources = jsonEntries, 
      totalResults = 1 
     }; 
    } 

我get调用

private Bag<T> GetData<T>(string uri) 
    { 
     try 
     { 
      var request = (HttpWebRequest) WebRequest.Create(uri); 
      request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
      request.Headers[HttpRequestHeader.Authorization] = _authorizationData; 
      var response = (HttpWebResponse) request.GetResponse(); 
      Stream stream = response.GetResponseStream(); 
      var localStream = new MemoryStream(); 
      CopyStream(stream, localStream); 
      stream.Close(); 
      var result = JsonContractExtensions.Create<T>(localStream); 
      return new Bag<T>(result); 
     } 
     catch (WebException ex) 
     { 
      _log.Debug(ex); 
      return Bag<T>.Empty; 
     } 
     catch (Exception ex) 
     { 
      _log.Debug(ex); 
      return Bag<T>.Empty; 
     } 
    } 
+0

感谢帮助。我将'IsRequired = false' - 属性添加到'DataMember'。如果我没有这个DataMember请求Json,它给了我对象和''employee':null'。有没有这种元素不打印的方法? – robidd 2012-07-31 15:22:59