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);
}
我有一个 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);
}