WCF error: Expecting state 'Element'.. Encountered 'Text' with name '', namespace '' post call in XML format

WCF error: Expecting state 'Element'.. Encountered 'Text' with name '', namespace '' post call in XML format

我有一个 WCF 服务方法无法反序列化 XML 格式的 post 并且会出错

Error in line 14 position 30. Expecting state 'Element'.. Encountered 'Text' with name '', namespace ''

我缩小到特定部分,例如下面的可重现样本

var xmlSrc = @"<Keys>
                  <ProductKeyID>123</ProductKeyID>
                  <ProductKeyID>124</ProductKeyID>
                  <ProductKeyID>125</ProductKeyID>
               </Keys>";
DataContractSerializer serializer = new DataContractSerializer(typeof(Keys));
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xmlSrc)))
{

    var i = (Keys)serializer.ReadObject(stream);
}

[DataContract(Namespace = "")]
[Serializable]
public class Keys
{
    [DataMember(Order = 1)]
    public List<string> ProductKeyID { get; set; }
}

如何调整 C# class 以正确反序列化 XML?

我确实搜索了 post 存在,但其中大部分都是 json 格式,似乎对我的情况没有帮助。

作为替代方法,您可以使用 CollectionDataContract 属性。您的 class Keys 将从 List 继承。在 CollectionDataContract 属性中指定根元素的名称和项目的名称。

[CollectionDataContract(Name = "Keys", ItemName = "ProductKeyID", Namespace ="")]
public class Keys<T> : List<T>
{
}

DataContractSerializer serializer = new DataContractSerializer(typeof(Keys<string>));
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xmlSrc)))
{
    var i = (Keys<string>)serializer.ReadObject(stream);
}