【问题标题】:System.Runtime.Serialization.SerializationException: Expecting element from namespaceSystem.Runtime.Serialization.SerializationException:期望来自命名空间的元素
【发布时间】:2014-04-15 04:50:27
【问题描述】:

由于某种原因,我觉得这个对 post 的调用没有正确设置,这意味着给我的消息是我认为 WCF 中的方法没有在 POST 中接收到 InventoryRequest 对象?

   var inventoryRequest = new InventoryRequest
    {
        memberID = "1",
        Inventories = _inventories.ToArray()
    };


    //Act
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("http://localhost/Inventory");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        inventoryResponse = await client.PostAsJsonAsync("", inventoryRequest).Result.Content.ReadAsAsync<InventoryResponse>();
    }

我在我的 MSTest 中收到此错误:

    System.Runtime.Serialization.SerializationException: Error in line 1 position 70. Expecting element 'InventoryResponse' from namespace 'http://schemas.datacontract.org/2004/07/Responses'.. Encountered 'Element'  with name 

'Fault', namespace 'http://schemas.microsoft.com/ws/2005/05/envelope/none'. 
    at System.Runtime.Serialization.DataContractSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName, DataContractResolver dataContractResolver)
   at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)
   at System.Runtime.Serialization.DataContractSerializer.ReadObject(XmlReader reader)

还有一点很奇怪,它在谈论上面的 xml 阅读器。我将 json 指定为内容类型,为什么它试图用 xml 解析?

旁注:当我在 Fiddler 中尝试 POST 到相同的 uri 并在提琴手主体中指定 InventoryRequest 的 json 表示时,它工作正常......并返回 json

【问题讨论】:

标签: c# wcf httpclient


【解决方案1】:

这样试试:

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://localhost/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    inventoryResponse = await client.PostAsJsonAsync("Inventory", inventoryRequest).Result.Content.ReadAsAsync<InventoryResponse>();
}

【讨论】:

    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2019-01-14
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 2011-06-22
    相关资源
    最近更新 更多