【问题标题】:WCF PUT - JSON body to objectWCF PUT - JSON 主体到对象
【发布时间】:2014-12-10 19:30:28
【问题描述】:

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

这个 SO 对我有用:WCF REST Service JSON Post data

我可以将 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() { }
}

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);

}

【问题讨论】:

  • 你能发布反序列化 JSON 的代码吗?即使它不起作用?出于好奇,您为什么使用字段而不是属性?
  • 这基本上是我的问题,我需要创建代码来反序列化它还是有办法轻松地做到这一点?
  • do I need to create code to deserialize it or is there a way to do it somewhat easily? 不,您评论的界面是正确的方法,它应该可以工作。如果我没记错的话,你应该使用WebHttpBinding

标签: c# .net json wcf rest


【解决方案1】:

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

这是实现 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("");

        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多