Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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# REST与多态数据契约-反序列化失败_C#_.net_Wcf_Rest_Datacontract - Fatal编程技术网

C# REST与多态数据契约-反序列化失败

C# REST与多态数据契约-反序列化失败,c#,.net,wcf,rest,datacontract,C#,.net,Wcf,Rest,Datacontract,这一整天都让我发疯,因为我没有做任何改变,但我发誓这是按照我昨天的计划进行的 我使用以下合同定义了WCF 4 REST服务: [ServiceContract] public interface IPhoneFeaturesManagementHost { [OperationContract] [WebInvoke(Method = "POST", UriTemplate = "/accounts/{accountNumber}/phoneNumbers/{phoneNumbe

这一整天都让我发疯,因为我没有做任何改变,但我发誓这是按照我昨天的计划进行的

我使用以下合同定义了WCF 4 REST服务:

[ServiceContract]
public interface IPhoneFeaturesManagementHost
{
    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "/accounts/{accountNumber}/phoneNumbers/{phoneNumber}/features/{featureType}", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
    void UpdateFeatureStatus(string accountNumber, string phoneNumber, string featureType, FeatureUpdateRequest updateRequest);
}
我还定义了以下类型:

[DataContract]
[KnownType(typeof(One900FeatureUpdateRequest))]
public abstract class FeatureUpdateRequest
{
    [DataMember]
    public FeatureStatus Status { get; set; }

    [DataMember]
    public DateTime EffectiveDate { get; set; }

    public string AccountNumber { get; set; }
    public string PhoneNumber { get; set; }
    public string UserId { get; set; }
    public DateTime Timestamp { get; set; }

    public override string ToString()
    {
        return String.Format("Status: {0}, Effective Date: {1}", Status, EffectiveDate);
    }
}

[DataContract]
public class One900FeatureUpdateRequest : FeatureUpdateRequest
{
    [DataMember]
    public bool PerformSwitchUpdate { get; set; }
}
昨天我发誓我能够提交此表单的POST数据:

<One900FeatureUpdateRequest>
  <EffectiveDate>1999-05-31T11:20:00</EffectiveDate>
  <Status>Enabled</Status>
  <PerformSwitchUpdate>true</PerformSwitchUpdate>
</One900FeatureUpdateRequest>
现在唯一有效的XML是下面的XML,我真的不喜欢添加名称空间加属性来描述我的子DataContract的子类型

<FeatureUpdateRequest i:type="One900FeatureUpdateRequest" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Project.Services.Host">
  <EffectiveDate>1999-05-31T11:20:00</EffectiveDate>
  <Status>Enabled</Status>
  <PerformSwitchUpdate>true</PerformSwitchUpdate>
</FeatureUpdateRequest>

1999-05-31T11:20:00
启用
真的
对于我可能接触到的内容,或者为了返回到以前的简单XML格式进行反序列化,我可能需要更改哪些内容,有人有什么想法吗


任何帮助都将不胜感激。谢谢

我找不到使用DataContractSerializer实现这一点的方法,因此我改为使用旧的XmlSerializer,以便可以直接控制XML格式。这似乎有效。

尝试过这个,但不幸的是没有效果。谢谢你!
<FeatureUpdateRequest i:type="One900FeatureUpdateRequest" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Project.Services.Host">
  <EffectiveDate>1999-05-31T11:20:00</EffectiveDate>
  <Status>Enabled</Status>
  <PerformSwitchUpdate>true</PerformSwitchUpdate>
</FeatureUpdateRequest>