C# 如何序列化wcf web服务中通用函数上的嵌套类以在REST中使用?
我正在尝试以REST(json)服务的形式访问我们的web服务方法。我在web.config上进行了一些配置,并将该属性添加到web服务的函数中,如下所示C# 如何序列化wcf web服务中通用函数上的嵌套类以在REST中使用?,c#,json,web-services,wcf,rest,C#,Json,Web Services,Wcf,Rest,我正在尝试以REST(json)服务的形式访问我们的web服务方法。我在web.config上进行了一些配置,并将该属性添加到web服务的函数中,如下所示 [OperationContract] [WebInvoke(Method = "POST", UriTemplate = "Echo")] ResultSet<EchoObj> GetEcho(string sth); 编辑:我忘记了派生类WaveObj,它如下所示: [DataContract] public class W
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "Echo")]
ResultSet<EchoObj> GetEcho(string sth);
编辑:我忘记了派生类WaveObj,它如下所示:
[DataContract]
public class WaveObj
{
[DataMember]
public virtual string Code { get; set; }
[DataMember]
public virtual string Type { get; set; }
...
}
[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"; }
}
}
我想,WaveObj和EchoObj有问题,但我找不到
有没有办法修复序列化错误
非常感谢。请查看“KnownType”属性
我在书中搜索以了解这里的问题所在,我知道,wcf不理解DateTime属性,无法将其序列化为仅具有DataMember属性的json。该属性应如下所示:
[DataContract]
public class WaveObj
{
[DataMember]
public virtual string Code { get; set; }
[DataMember]
public virtual string Type { get; set; }
...
}
[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)]
以解决该问题。我知道KnownType属性,但它不起作用,我以前尝试过。
[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"; }
}
}