【发布时间】:2018-08-31 04:27:06
【问题描述】:
我有这些课程:
public class WikiEntry
{
public string Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
[XmlArray]
public List<Category> Categories { get; set; }
}
public class Category
{
[XmlAttribute]
public string Id { get; set; }
[XmlAttribute]
public string Text { get; set; }
}
一开始我有这个 XML 结构:
<Wiki>
<Categories></Categories>
<Tags></Tags>
<WikiEntries></WikiEntries>
</Wiki>
我正在序列化 wiki.Categories 并将其添加到现有的 XML 中,如下所示:
var xDoc = XDocument.Load("Data.xml");
WikiEntry wiki = new WikiEntry
{
Id = Guid.NewGuid().ToString(),
Title = "Simple title",
Content = "Simple content here",
Categories = new List<Category>
{
new Category
{
Id = Guid.NewGuid().ToString(),
Text = "CATEGORYA"
},
new Category
{
Id = Guid.NewGuid().ToString(),
Text = "CATEGORYB"
}
}
};
var categories = xDoc.Root.Element("Categories");
var categoriesBuilder = new StringBuilder();
using (var writer = XmlWriter.Create(categoriesBuilder, new XmlWriterSettings { Indent = true, ConformanceLevel = ConformanceLevel.Auto, OmitXmlDeclaration = true }))
{
var ns = new XmlSerializerNamespaces();
ns.Add("", "");
var xs = new XmlSerializer(typeof(List<Category>), "");
xs.Serialize(writer, wiki.Categories, ns);
}
categories.Add(XElement.Parse(categoriesBuilder.ToString().Trim()));
xDoc.Save(file);
问题是当我这样做时:
<Categories>
<ArrayOfCategory>
<Category Id="482ce9f6-5d4c-48f9-b84f-33c3cf9b0b0f" Text="CATEGORYA" />
<Category Id="73e6c671-fb6d-40a4-8694-1d5dbcf381d5" Text="CATEGORYB" />
</ArrayOfCategory>
<ArrayOfCategory>
<Category Id="3c0f2a15-4623-4f33-b356-75e8c8b89624" Text="CATEGORYA" />
<Category Id="d8720ca9-06f5-401d-90e2-c7f43e1c91f5" Text="CATEGORYB" />
</ArrayOfCategory>
所以,我的问题是如何序列化我的 Category 类,以便得到这个(省略 <ArrayOfCategory> 父级):
<Categories>
<Category Id="482ce9f6-5d4c-48f9-b84f-33c3cf9b0b0f" Text="CATEGORYA" />
<Category Id="73e6c671-fb6d-40a4-8694-1d5dbcf381d5" Text="CATEGORYB" />
<Category Id="3c0f2a15-4623-4f33-b356-75e8c8b89624" Text="CATEGORYA" />
<Category Id="d8720ca9-06f5-401d-90e2-c7f43e1c91f5" Text="CATEGORYB" />
</Categories>
注意:我想删除它,而不是重命名它。
【问题讨论】:
-
您能否发布您的完整代码,包括如何实例化 categoriesBuilder 和 wiki?
-
您忘记显示 xDoc 是如何被实例化的。
-
完成。感谢您了解这一点。
-
添加响应作为答案。
标签: c# asp.net xml serialization linq-to-xml