Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何序列化wcf web服务中通用函数上的嵌套类以在REST中使用?_C#_Json_Web Services_Wcf_Rest - Fatal编程技术网

C# 如何序列化wcf web服务中通用函数上的嵌套类以在REST中使用?

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

我正在尝试以REST(json)服务的形式访问我们的web服务方法。我在web.config上进行了一些配置,并将该属性添加到web服务的函数中,如下所示

[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"; }
     }
}