![](/img/trans.png)
[英]JSON error : expecting state 'element'.. encountered 'text' with name '', namespace ''
[英]WCF error: Expecting state 'Element'.. Encountered 'Text' with name '', namespace '' post call in XML format
我有一個 WCF 服務方法,它不能反序列化 XML 格式的帖子,並且會出錯
第 14 行錯誤 position 30。期望 state '元素'..遇到名稱為 '',命名空間''的'文本'
我縮小到特定部分,例如下面的可重現示例
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?
我確實搜索了該帖子,但其中大多數是 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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.