簡體   English   中英

WCF 錯誤:期望 state '元素'..遇到名稱為''的'文本',命名空間''以 XML 格式發布調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM