我有这个班级
public class dtoObject : CommonBase
{
[XmlArray("SomeItems"), XmlArrayItem("SomeItem")]
public List<dtoSomeItem> SomeItems
{
get { return _SomeItems; }
set { _SomeItems = value; }
}
}
我希望使用XML Serialization使XML字符串显示为:
<Objects>
<Object>
<SomeItems>
<SomeItem>
1
</SomeItem>
<SomeItem>
2
</SomeItem>
</SomeItems>
</Object>
<Object>
<SomeItems>
<SomeItem>
3
</SomeItem>
<SomeItem>
4
</SomeItem>
</SomeItems>
</Object>
</Objects>
但对于我的生活,我无法弄清楚要放在什么之前
public class dtoObject
在属性方面,以便我得到
<Objects><Object>...</Object><Object>...
我序列化时。
有什么想法吗?
答案 0 :(得分:1)
我不认为您可以使用对象结构执行此操作,因为XML有效地声明了SomeItems集合的包装器。例如:
[XmlType("Objects")]
public class dtoObject : CommonBase
{
[XmlElement("Object")]
public List<dtoSomeItemWrapper> SomeItemsWrappers
{
get { return _SomeItemsWrappers; }
set { _SomeItemsWrappers = value; }
}
}
class dtoSomeItemWrapper
{
[XmlArray("SomeItems"), XmlArrayItem("SomeItem")]
public List<dtoSomeItem> SomeItems
{
get { return _SomeItems; }
set { _SomeItems = value; }
}
}
答案 1 :(得分:1)
这是我的工作。感谢comptent_tech和dthorpe的帮助。我这样创建了我的DTO:
[XmlType("Object", Namespace = "", TypeName = "Object")]
public class dtoObject : CommonBase
{
[XmlArray("SomeItems"), XmlArrayItem("SomeItem")]
public List<dtoSomeItem> SomeItems
{
get { return _SomeItems; }
set { _SomeItems = value; }
}
}
我执行序列化的功能是:
public string ToXML(List<dtoObject> oObject)
{
XmlDocument xmlDoc = new XmlDocument();
XmlSerializer xmlSerializer = new XmlSerializer(oObject.GetType(), new XmlRootAttribute("Objects"));
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
using (MemoryStream xmlStream = new MemoryStream())
{
xmlSerializer.Serialize(xmlStream, oObject, ns);
xmlStream.Position = 0;
xmlDoc.Load(xmlStream);
return xmlDoc.InnerXml;
}
}
这样做会创建xml格式:
<?xml version="1.0"?>
<Objects>
<Object>
<SomeItems>
<SomeItem>
</SomeItem>
</SomeItems>
</Object>
<Objects>
答案 2 :(得分:0)
你需要在类声明前面加XmlRootAttribute("Object", Namespace="", IsNullable=false)
之类的东西。这告诉XML序列化程序使用<Object>
标记来表示XML文本中的dtoObject。
对于<Objects>
标记,除非您序列化dtoObject数组,否则不会得到它。这超出了dtoObject类型的范围。