2014-12-10 3 views
0

Это мой первый сервис REST, в основном это самообслуживаемая служба, которая прослушивает порт для вызова PUT, который будет иметь полезную нагрузку данных JSON. Я хочу преобразовать это в собственный объект, я думал, что сериализатор может сделать это автоматически, но он не работает.WCF PUT - тело JSON для объекта

Это так же работа для меня: WCF REST Service JSON Post data

я могу получить данные в формате JSON как поток и выводит его в журнал просто отлично, но теперь мне интересно, если WCF может автоматически поместить данные в формате JSON для моего объекта ,

Данные JSON - это.

{ 
    "ID": 639073, 
    "PatientFirst": "John", 
    "PatientLast": "Smith", 
    "Birthdate": "1/1/2000", 
    "PtEmail":"[email protected]", 
    "Sex": "F", 
    "mrn": "" 
} 

У меня есть класс ApptData, который является этим.

[DataContract] 
class ApptData { 
    [DataMember] 
    internal string ID = ""; 

    [DataMember] 
    internal string PatientFirst = ""; 
    [DataMember] 
    internal string PatientLast = ""; 
    [DataMember] 
    internal string Birthdate = ""; 
    [DataMember] 
    internal string PtEmail = ""; 
    [DataMember] 
    internal string Sex = ""; 
    [DataMember] 
    internal string mrn = ""; 

    public ApptData() { } 
} 

И iContract это. Я хочу использовать материал, который прокомментирован.

[ServiceContract] 
interface iContract 
{ 
    [OperationContract] 


    [WebInvoke(Method = "PUT", UriTemplate = "CheckinPUT", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] 
    [OperationContract] 
    //Stream PatientCheckinWithDemos(ApptData data); 
    Stream PatientCheckinWithDemos(Stream streamdata); 

} 
+0

Можете ли вы опубликовать код для десериализации JSON? Даже если он не работает? И из любопытства, почему вы используете поля вместо свойств? – Tim

+0

Это в основном мой вопрос, мне нужно создать код для десериализации или есть способ сделать это несколько легко? – Rob

+0

'мне нужно создать код для десериализации или есть способ сделать это несколько легко?' Нет, ваш комментарий интерфейс является правильным способом, и он должен работать. Если я правильно помню, вы должны использовать 'WebHttpBinding'. –

ответ

0

У меня есть решение, в котором я делаю десериализацию. Это не слишком сложно.

Вот класс, который вводит iContract.

public Stream PatientCheckinWithDemos(Stream streamdata) { 
     try { 
      DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(ApptData)); 
      ApptData data = (ApptData)ser.ReadObject(streamdata); 
      c.WriteToLog("Appt id is " + data.ID); 
      c.WriteToLog("PatientFirst is " + data.PatientFirst); 
      c.WriteToLog("PatientLast is " + data.PatientLast); 
      c.WriteToLog("PtEmail is " + data.PtEmail); 
      c.WriteToLog("Sex is " + data.Sex); 
      c.WriteToLog("Birthdate is " + data.Birthdate); 

      return GetStream("something"); 
     } catch (Exception e) { 
      c.WriteToLog("Failure during Database Call to PatientCheckinWithDemos " + e.Message); 
      return GetStream(""); 

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