c# - 如何做多个不同的类来生成 XML?
问题描述
我正在尝试进行 XML 序列化。其中有多个不同的类,即Header & Item。我创建类TransferOrder来组合Header 和 Item。 标题做得很好,但项目显示两次。
下面是我的 Program.cs
using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using System.IO;
using System.Collections.Generic;
namespace XML_Serialization
{
class Program
{
public static void Main(string[] args)
{
Program p = new Program();
p.Final("item.xml");
}
public void Final(string filename)
{
XmlSerializer s = new XmlSerializer(typeof(TransferOrder));
TextWriter writer = new StreamWriter(filename);
TransferOrder c = new TransferOrder();
Header head = new Header();
head.DocNo = 0000000044;
head.MoveType = 311;
head.SourceStrType = 010;
head.SourceStrBin = "IQA";
head.DestStrType = 921;
head.DestStrBin = "TRANSFER";
head.Werks = 3006;
c.Header = head;
//Item Serialization
Item item1 = new Item();
item1.MaterialNo = 000000000010001251;
item1.Sloc = "KM22";
item1.Quantity = 5.000;
item1.UOM = "M2";
item1.PlantID = 3006;
item1.LineItem = 1;
Item item2 = new Item();
item2.MaterialNo = 000000000010001251;
item2.Sloc = "KM22";
item2.Quantity = 5.000;
item2.UOM = "M2";
item2.PlantID = 3006;
item2.LineItem = 2;
Item item3 = new Item();
item3.MaterialNo = 000000000010001251;
item3.Sloc = "KM22";
item3.Quantity = 5.000;
item3.UOM = "M2";
item3.PlantID = 3006;
item3.LineItem = 3;
Item[] ig = { item1, item2, item3 };
c.Item = ig;
s.Serialize(writer, c);
writer.Close();
}
}
public class TransferOrder
{
public Header Header { get; set; }
public Item []Item { get; set; }
}
public class Header
{
public int DocNo { get; set; }
public int MoveType { get; set; }
public int SourceStrType { get; set; }
public string SourceStrBin { get; set; }
public int DestStrType { get; set; }
public string DestStrBin { get; set; }
public int Werks { get; set; }
}
public class Item
{
public int MaterialNo { get; set; }
public string Sloc { get; set; }
public double Quantity { get; set; }
public string UOM { get; set; }
public int PlantID { get; set; }
public int LineItem { get; set; }
}
我想要得到的结果是这样的
<?xml version="1.0" encoding="utf-8"?><dtl:TransferOrder xmlns:dtl="http://FS.BizTalk.App.RFID.CommonTODetail.Schemas.DetailTO/2021/03">
<Header>
<DocNo>0000000044</DocNo>
<MoveType>311</MoveType>
<SourceStrType>010</SourceStrType>
<SourceStrBin>IQA</SourceStrBin>
<DestStrType>921</DestStrType>
<DestStrBin>TRANSFER</DestStrBin>
<Werks>3006</Werks>
</Header>
<Item>
<MaterialNo>000000000010001251</MaterialNo>
<SLoc>KM22</SLoc>
<Quantity>5.000</Quantity>
<UOM>M2</UOM>
<PlantId>3006</PlantId>
<LineItem>1</LineItem>
</Item>
<Item>
<MaterialNo>000000000010001251</MaterialNo>
<SLoc>KM22</SLoc>
<Quantity>5.000</Quantity>
<UOM>M2</UOM>
<PlantId>3006</PlantId>
<LineItem>2</LineItem>
</Item>
<Item>
<MaterialNo>000000000010001251</MaterialNo>
<SLoc>KM22</SLoc>
<Quantity>5.000</Quantity>
<UOM>M2</UOM>
<PlantId>3006</PlantId>
<LineItem>3</LineItem>
</Item>
</dtl:TransferOrder>
但是,如果您运行我的代码,我的代码输出有2 Item Element。这与我想要的不同。
谁能帮我解决这个问题?
解决方案
添加[XmlElement]
:
public class TransferOrder
{
public Header Header { get; set; }
[XmlElement]
public Item []Item { get; set; }
}
(默认行为是在列表/数组上添加一个包装层;[XmlElement]
告诉它忽略它并直接转到子数据)
推荐阅读
- system - 使公平损失可靠
- node.js - Node.js 使用 Jest 捕获异步错误
- javascript - 使用 Redux 数据持久化 Material-UI 选择
- python - 如何创建一个显示下拉菜单的表单,其中包含特定于该用户的项目?
- github - 在 Mac 和 Windows 之间传输项目
- c# - ScalarKeyFrameAnimation 的持续时间变短了
- c - 为什么有些函数的原型带有星号?
- python - Python Pandas:根据指定条件将一列中的值替换为另一列中的值
- gradle - 错误:无法解析“:app@debugAndroidTest/compileClasspath”的依赖关系:
- c++ - 在 C++ 中创建工具栏