我正在尝试将我们的Web服务方法称为REST(json)服务。我在web.config上进行了一些配置,并将属性添加到Web服务的功能中,如下所示。
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "Echo")]
ResultSet<EchoObj> GetEcho(string sth);
它也有这样的实现:
public ResultSet<EchoObj> GetEcho(string sth)
{
ResultSet<EchoObj> obj = new ResultSet<EchoObj>();
obj = DoSomeWork();
if(obj.IsOk)
{
obj.Item = new EchoObj();
obj.Item.Sound = "My Sound";
obj.Item.Volume = Volume.High;
} else
{
obj.ErrorDesc = "Sound not found.";
}
return obj;
}
在这里,如果obj有错误,它将正确返回响应。如果obj没问题,那么它不会返回任何响应。我敢肯定,这是由于序列化错误引起的。
ResultSet和EchoObj类在下面:
ResultSet类:
[DataContract(Name = "ResultSet")]
public class ResultSet<T> where T : class
{
[DataMember()]
public bool IsOk{ get; set; }
[DataMember()]
public string ErrorDesc { get; set; }
[DataMember()]
public T Item { get; set; }
...
}
EchoObj类别:
[DataContract]
public class EchoObj : WaveObj
{
[DataMember]
public string Sound { get; set; }
[DataMember]
public string Volume { get; set; }
[DataMember]
public DateTime TimeAt { get; set; }
[DataMember]
public override string Code
{
get { return "TestSound"; }
}
[DataMember]
public override string Type
{
get { return "Test"; }
}
}
编辑:我忘了派生类WaveObj,它看起来像在下面:
[DataContract]
public class WaveObj
{
[DataMember]
public virtual string Code { get; set; }
[DataMember]
public virtual string Type { get; set; }
...
}
我认为,WaveObj和EchoObj出了点问题,但我找不到。
有什么想法如何解决该序列化错误吗?
非常感谢。
我在书上进行了搜索,以了解这里存在的问题,并且我知道,wcf无法理解DateTime属性以仅使用DataMember属性将其序列化为json。该属性应如下所示:
[DataContract]
public class EchoObj : WaveObj
{
[DataMember]
public string Sound { get; set; }
[DataMember]
public string Volume { get; set; }
[DataMember(EmitDefaultValue = false)]
public DateTime TimeAt { get; set; }
[DataMember]
public override string Code
{
get { return "TestSound"; }
}
[DataMember]
public override string Type
{
get { return "Test"; }
}
}
DateTime属性的属性[DataMember(EmitDefaultValue = false)]
应用于解决该问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句