WCF 将 - JSON 主体置于对象

本文关键字:对象 于对象 JSON 主体 WCF | 更新日期: 2023-09-27 18:33:50

这是我的第一个REST服务,基本上它是一个自托管服务,它正在端口上侦听PUT调用,该调用将具有JSON数据的有效负载。 我想将其转换为本机对象,我认为序列化程序可以自动执行此操作,但它不起作用。

这个SO确实对我有用:WCF REST服务JSON发布数据

我可以将 JSON 数据作为流获取并将其输出到日志中,但现在我想知道 WCF 是否可以自动将 JSON 数据放入我的对象。

JSON数据是这样的。

{
  "ID": 639073,
  "PatientFirst": "John",
  "PatientLast": "Smith",
  "Birthdate": "1/1/2000",
  "PtEmail":"rdejournett@medfusion.com",
  "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() { }
}

而电子合同就是这样。 我想使用注释掉的东西。

[ServiceContract]
interface iContract
{
    [OperationContract]

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

WCF 将 - JSON 主体置于对象

我有一个解决方案,我在其中进行反序列化。 这并不难。

这是包含 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("");
        }
    }