序列化时未获取 xml 输入值以列出 wcf 服务中的类
Posted
技术标签:
【中文标题】序列化时未获取 xml 输入值以列出 wcf 服务中的类【英文标题】:not getting xml input value to list class in wcf service while serializing 【发布时间】:2021-10-31 21:06:18 【问题描述】:我在序列化 WCF 服务上的 xml 输入时遇到了获取列表对象类型的问题。我没有得到 Data 类的列表值,它给出的计数值为零。我是 WCF 服务的新手。你能帮帮我吗?
下面是例子:
[DataContract]
public class Item
[DataMember]
public int Id get; set;
[DataMember]
public string Name get; set;
[DataMember]
public List<Data> data get; set;
[DataContract]
public class Data
[DataMember]
public int dataId get; set;
[DataMember]
public int dataName get; set;
[DataMember]
public int dataVolume get; set;
并在服务类中序列化xml数据
public Stream Conversion(Stream request)
XmlSerializer serializer1 = new XmlSerializer(typeof(Item));
Item item = (Item)serializer1.Deserialize(request);
【问题讨论】:
【参考方案1】:XmlSerializer 允许列表是同名元素的序列,例如:
[XmlRoot("Item", Namespace="")]
public class Item
public int Id get; set;
public string Name get; set;
[XmlElement("Data")]
public List<Data> Data get; set;
public class Data
[DataMember]
public int dataId get; set;
[DataMember]
public string dataName get; set;
[DataMember]
public int dataVolume get; set;
然后试试这个:
public static class XmlSerializationHelper
public static string GetXml<T>(T obj, XmlSerializer serializer, bool omitStandardNamespaces)
using (var textWriter = new StringWriter())
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true; // For cosmetic purposes.
settings.IndentChars = " "; // For cosmetic purposes.
using (var xmlWriter = XmlWriter.Create(textWriter, settings))
if (omitStandardNamespaces)
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", ""); // Disable the xmlns:xsi and xmlns:xsd lines.
serializer.Serialize(xmlWriter, obj, ns);
else
serializer.Serialize(xmlWriter, obj);
return textWriter.ToString();
public static string GetXml<T>(this T obj, bool omitNamespace)
XmlSerializer serializer = new XmlSerializer(obj.GetType());
return GetXml(obj, serializer, omitNamespace);
public static string GetXml<T>(this T obj)
return GetXml(obj, false);
这是测试代码:
var item = new Item Id= 1, Name = "The Car", Data = new[] new Data dataId = 1, dataName = "Vovol",dataVolume = 135 , new Data dataId = 2, dataName = "Cadillac",dataVolume = 136 .ToList() ;
var xml = item.GetXml();
Debug.WriteLine(xml);
以下 xml 用于您的课程:
<Item>
<Id>1</Id>
<Name>The Car</Name>
<Data>
<dataId>1</dataId>
<dataName>Vovol</dataName>
<dataVolume>135</dataVolume>
</Data>
<Data>
<dataId>2</dataId>
<dataName>Cadillac</dataName>
<dataVolume>136</dataVolume>
</Data>
</Item>
【讨论】:
感谢先生分享信息。它的工作。酷以上是关于序列化时未获取 xml 输入值以列出 wcf 服务中的类的主要内容,如果未能解决你的问题,请参考以下文章
当 url 段为 json 字符串时,访问 WCF Rest 服务 (WebGet) 时未找到 404
在 C# 中为 WCF 服务反序列化简单的 XML 数组对象