gpt4 book ai didi

c# - XmlSerializer 将 C# 对象转换为 xml 字符串

转载 作者:数据小太阳 更新时间:2023-10-29 01:44:04 25 4
gpt4 key购买 nike

我创建了一个 C# 类:

public class books {
public int bookNum { get; set; }
public class book {
public string name { get; set; }
public class record {
public string borrowDate { get; set; }
public string returnDate { get; set; }
}
public record[] records { get; set; }
}
public book[] books { get; set; }
}

但是当我使用 XmlSerializer 转换为 XML 字符串时。结果与下面的 xml 不一样。

我的 C# 类有什么问题?我想使用 XmlSerializer 来输出结果而不是使用XmlDocument.

有什么想法吗?提前致谢!

<books>
<bookNum>2</bookNum>
<book>
<name>Book 1</name>
<record>
<borrowDate>2013-7-1</borrowDate>
<returnDate>2013-7-12</returnDate>
</record>
<record>
<borrowDate>2013-8-1</borrowDate>
<returnDate>2013-8-5</returnDate>
</record>
</book>
<book>
<name>Book 2</name>
<record>
<borrowDate>2013-6-1</borrowDate>
<returnDate>2013-6-12</returnDate>
</record>
<record>
<borrowDate>2013-7-1</borrowDate>
<returnDate>2013-7-5</returnDate>
</record>
</book>
</books>

编辑

下面是我的C#代码和输出结果:

books books = new books {
bookNum = 2,
Books = new books.book[] {
new books.book {
name = "Book1",
records = new books.book.record[] {
new books.book.record {
borrowDate = "2013-1-3",
returnDate = "2013-1-5"
},
new books.book.record {
borrowDate = "2013-2-3",
returnDate = "2013-4-5"
}
}
},
new books.book {
name = "Book1",
records = new books.book.record[] {
new books.book.record {
borrowDate = "2013-1-3",
returnDate = "2013-1-5"
},
new books.book.record {
borrowDate = "2013-2-3",
returnDate = "2013-4-5"
}
}
}
}
};


XmlSerializer xsSubmit = new XmlSerializer(typeof(books));

XmlDocument doc = new XmlDocument();

System.IO.StringWriter sww = new System.IO.StringWriter();
XmlWriter writer = XmlWriter.Create(sww);
xsSubmit.Serialize(writer, books);
var xml = sww.ToString(); // Your xml
context.Response.Write(xml);

XML:

<books>
<bookNum>2</bookNum>
<Books>
<book>
<name>Book1</name>
<records>
<record>
<borrowDate>2013-1-3</borrowDate>
<returnDate>2013-1-5</returnDate>
</record>
<record>
<borrowDate>2013-2-3</borrowDate>
<returnDate>2013-4-5</returnDate>
</record>
</records>
</book>
<book>
<name>Book1</name>
<records>
<record>
<borrowDate>2013-1-3</borrowDate>
<returnDate>2013-1-5</returnDate>
</record>
<record>
<borrowDate>2013-2-3</borrowDate>
<returnDate>2013-4-5</returnDate>
</record>
</records>
</book>
</Books>
</books>

最佳答案

您不能使用标准序列化工具将问题中的类序列化为 <book><bookNum> 处于同一级别的条目节点。

当使用标准序列化工具列表保存类时 <book>节点将始终嵌套到与 <bookNum> 处于同一级别的单独数组节点 中节点。同样的担忧records book 上的数组字段类。

要生成您想要的 XML 输出 - 使用 <book><bookNum> 处于同一级别的节点节点 - 你必须实现 IXmlSerializable books 中的界面用于自定义序列化的类。查看 IXmlSerializable 的示例实现访问这些链接:StackOverflow answer , CodeProject article .

另一种解决方案将是 - 如上所述 user Alexandr评论我的回答 - 继承你的 books来自 List<book> 的类(class)输入并在您的 book 上显示类字段 recordsList<record> 继承的类类型类型。

从您的问题序列化类时,假设您分配的是正确的 XmlRoot, XmlElement, XmlArray and XmlArrayItem attributes如下:

[XmlRoot("books")]
public class books
{
[XmlElement("bookNum")]
public int bookNum { get; set; }

[XmlRoot("book")]
public class book
{
[XmlElement("name")]
public string name { get; set; }

[XmlRoot("record")]
public class record
{
[XmlElement("borrowDate")]
public string borrowDate { get; set; }

[XmlElement("returnDate")]
public string returnDate { get; set; }
}

[XmlArray("borrowRecords")]
[XmlArrayItem("record")]
public record[] records { get; set; }
}

[XmlArray("booksList")]
[XmlArrayItem("book")]
public book[] books { get; set; }
}

您将得到如下 XML 输出:

<books>
<bookNum>2</bookNum>
<booksList>
<book>
<name>Book 1</name>
<borrowRecords>
<record>
<borrowDate>2013-1-3</borrowDate>
<returnDate>2013-1-5</returnDate>
</record>
<record>
<borrowDate>2013-2-3</borrowDate>
<returnDate>2013-4-5</returnDate>
</record>
</borrowRecords>
</book>
<book>
<name>Book 2</name>
<borrowRecords>
<record>
<borrowDate>2013-1-3</borrowDate>
<returnDate>2013-1-5</returnDate>
</record>
<record>
<borrowDate>2013-2-3</borrowDate>
<returnDate>2013-4-5</returnDate>
</record>
</borrowRecords>
</book>
</booksList>
</books>

关于c# - XmlSerializer 将 C# 对象转换为 xml 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17739330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com