作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个对象
var myObj = new Root
{
Items = new List<Items>
{
new Items { MyValue1 = "test", MyValue2 = 22 },
new Items { MyValue1 = "test2", MyValue2 = 44 },
}
};
与
public class Root
{
public List<Items> Items { get; set; }
}
public class Items
{
public string MyValue1 { get; set; }
public int MyValue2 { get; set; }
}
我可以这样序列化它:
<Root>
<Items>
<Items>
<MyValue1>test</MyValue1>
<MyValue2>22</MyValue2>
</Items>
<Items>
<MyValue1>test2</MyValue1>
<MyValue2>44</MyValue2>
</Items>
</Items>
</Root>
但我想像这样序列化:
<Items>
<MyValue1>test</MyValue1>
<MyValue2>22</MyValue2>
</Items>
<Items>
<MyValue1>test2</MyValue1>
<MyValue2>44</MyValue2>
</Items>
但是我找不到办法做到这一点
这是复制代码:
class Program
{
static void Main(string[] args)
{
var myObj = new Root
{
Items = new List<Items>
{
new Items { MyValue1 = "test", MyValue2 = 22 },
new Items { MyValue1 = "test2", MyValue2 = 44 },
}
};
var serializer = new XmlSerializer(typeof(Root));
var ms = new MemoryStream();
var settings = new XmlWriterSettings { Encoding = new UTF8Encoding(false), OmitXmlDeclaration = true };
using var xmlWriter = XmlWriter.Create(ms, settings);
var ns = new XmlSerializerNamespaces();
ns.Add(string.Empty, string.Empty);
serializer.Serialize(xmlWriter, myObj, ns);
var xmlDebug = Encoding.UTF8.GetString(ms.ToArray());
var result = @"<?xml version=""1.0"" encoding=""utf-8""?><Items><MyValue1>test</MyValue1><MyValue2>22</MyValue2></Items><Items><MyValue1>test2</MyValue1><MyValue2>44</MyValue2></Items>";
Assert.AreEqual(result, xmlDebug);
}
}
public class Root
{
public List<Items> Items { get; set; }
}
public class Items
{
public string MyValue1 { get; set; }
public int MyValue2 { get; set; }
}
最佳答案
您可以在数据模型中使用 xml 属性。
public class Root
{
[XmlElement("Items")]
public List<Items> Items { get; set; }
}
public class Items
{
public string MyValue1 { get; set; }
public int MyValue2 { get; set; }
}
“列表”的默认 xml 属性是 XmlArrayItem,如果您为其使用 XmlElement,这将是您的结果
<Root>
<Items>
<MyValue1>test</MyValue1>
<MyValue2>22</MyValue2>
</Items>
<Items>
<MyValue1>test2</MyValue1>
<MyValue2>44</MyValue2>
</Items>
</Root>
并且xml格式必须始终有一个根节点。如果要更改根节点名称,可以使用 Root 类的 XmlRoot 属性。
[XmlRoot("AnotherName")]
public class Root
{
[XmlElement("Items")]
public List<Items> Items { get; set; }
}
关于c# - 在 C# 中没 Root过的 XmlSerialisation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72574234/
我正在使用 XMLSerializer 序列化 DOM,但是它将所有 & 转换为 & 并将 > 转换为 $lt; 等等 有什么办法可以阻止这种行为吗? 最佳答案 它不这样做。 XMLSerialize
我有这个对象 var myObj = new Root { Items = new List { new Items { MyValue1 = "test", MyVa
我正在使用的文件格式 (OFX) 是类似 XML 的,并且在类似 XML 的位开始之前包含一堆纯文本内容。它不喜欢在纯文本和 XML 部分之间,所以我想知道是否有办法让 XmlSerialiser 忽
我已经看了一段时间了 似乎不鼓励二进制序列化,因为对字段名称的任何更改都会破坏序列化 =?不好 XMLSerializer 是有问题的,因为您必须提供一个无参数的构造函数和公共(public)字段,尽
我是一名优秀的程序员,十分优秀!