2013-05-02 1 views
0

У меня есть метод, который возвращает класс Коно в формате JsonВозврат Различные JSON в методе WCF об ошибке

[DataContract] 
public class Cono 
{ 
    [DataMember(Order = 1)] 
    public Companies[] companies; 

} 
public class Companies 
{ 
    [DataMember(Order = 1)] 
    public string cono; 
    [DataMember(Order = 2)] 
    public string name; 
} 

     [WebGet(UriTemplate = "GetCompanies?requestKey={requestKey}", 
ResponseFormat = WebMessageFormat.Json)] 
     public Cono GetCompanies(string requestKey); 

этот метод первой проверки ключа запроса, если это правильно, то возвращает данные, как это:

{ 
companies: [ 
{ 
cono: "001", 
name: "Company001" 
} 
] 
} 

но если ключевой запрос не является правильным, я хочу, чтобы вернуть код ошибки в JSON, как этот

{-100} 

Как Я изменяю возвращаемый тип метода на Int или как я могу вернуть желаемые данные в вышеуказанном формате

+0

HTTP: //stackoverflow.com/questions/6258545/wcf-4-0-returning-json-webfaultexception-with-rest-service-template – EkoostikMartin

+0

Несомненно, если вы хотите сделать это RESTful, вы должны вернуть ошибку 401 Http? – Aron

ответ

0

Вы можете изменить тип возвращаемого вашего метода Stream (public Stream GetCompanies(string requestKey);) и написать метод

static Stream ToJson(object o) 
{ 
    var result = JsonConvert.SerializeObject(o); 
    var data = Encoding.UTF8.GetBytes(result); 

    WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8"; 
    WebOperationContext.Current.OutgoingResponse.ContentLength = data.Length; 
    return new MemoryStream(data); 
} 

Тогда в вашем методе, вы можете использовать его как

........ 
return ToJson(anyObject) 
+1

Спасибо! Это сработало –

0

Как насчет того, чтобы изменить тип возврата на что-то вроде этого?

[DataContract] 
public class Cono 
{ 
    [DataMember(Order = 1)] 
    public Companies[] companies; 

    [DataMember(Order = 2)] 
    public Error error;  
} 

public class Error 
{ 
    public int code; 
    public string message; 
} 

Тогда, если у вас есть ошибка, companies будет нулевым и error будет установлен. Если у вас нет ошибки, error будет пустым, а companies будет установлен.

Смежные вопросы