110,571
社区成员
发帖
与我相关
我的任务
分享
public class Stock : Data, IXmlSerializable
{
//货位代码
public string BinCode { get; set; }
//货位名称 排-列-层
public string BinName { get; set; }
//集装板Id
public string UldId { get; set; }
//入库时间 YYYY=MM-DD HH24:MI:SS
public string EntryTM { get; set; }
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
}
public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("BINCODE");
writer.WriteCData(this.BinCode);//写入<![CDATA[]]>
writer.WriteEndElement();
writer.WriteStartElement("BINNAME");
writer.WriteCData(this.BinName);
writer.WriteEndElement();
writer.WriteStartElement("ULDID");
writer.WriteCData(this.UldId);
writer.WriteEndElement();
writer.WriteStartElement("ENTRYTM");
writer.WriteCData(this.EntryTM);
writer.WriteEndElement();
}
}
public class GetIntask : Data,IXmlSerializable
{
//容器代码 0
public string ContainerCode { get; set; }
//任务流水号 0
public string SerialNo { get; set; }
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
}
public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("CONTAINERCODE");
writer.WriteCData(this.ContainerCode);//写入<![CDATA[]]>
writer.WriteEndElement();
writer.WriteStartElement("SERIALNO");
writer.WriteCData(this.SerialNo);
writer.WriteEndElement();
}
}
public class XmlHead:IXmlSerializable
{
//[XmlElement("USER")]
public string User { get; set; }
//[XmlElement("PWD")]
public string Pwd { get; set; }
//[XmlElement("STATECODE")]
public string StateCode { get; set; }
//[XmlElement("STATEDESC")]
public string StateDesc { get; set; }
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
reader.ReadStartElement("HEAD");//上一级节点
this.User = reader.ReadElementContentAsString("USER", "");
this.Pwd = reader.ReadElementContentAsString("PWD", "");
reader.ReadEndElement();
}
public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("USER");
writer.WriteCData(this.User);//写入<![CDATA[]]>
writer.WriteEndElement();
writer.WriteStartElement("PWD");
writer.WriteCData(this.Pwd);
writer.WriteEndElement();
if (this.StateCode!=null)
{
writer.WriteStartElement("STATECODE");
writer.WriteCData(this.StateCode);//写入<![CDATA[]]>
writer.WriteEndElement();
}
if (this.StateDesc!=null)
{
writer.WriteStartElement("STATEDESC");
writer.WriteCData(this.StateDesc);
writer.WriteEndElement();
}
}
}
[XmlInclude(typeof(Cells))]
[XmlInclude(typeof(GetIntask))]
[XmlInclude(typeof(InTaskResult))]
[XmlInclude(typeof(OutTaskResult))]
[XmlInclude(typeof(Stock))]
public class Data
{
}
public class XmlList
{
private List<Data> _DATALIST = new List<Data>();
[XmlArrayItem("DATA")]
public List<Data> DATALIST
{
get { return _DATALIST; }
set { _DATALIST = value; }
}
}
[XmlRoot("DATASETS")]
[Serializable]
public class XmlBody
{
private XmlHead head;
[XmlElement(ElementName = "HEAD")]
public XmlHead Head
{
get { return head; }
set { head = value; }
}
private XmlList dataset;
[XmlElement("DATASET")]
public XmlList Dataset
{
get { return dataset; }
set { dataset = value; }
}
}
private void Test1_Click(object sender, EventArgs e)
{
XmlHead head = new XmlHead();
head.Pwd = "123123";
head.User = "asfasf";
GetIntask intask = new GetIntask(){ContainerCode = "123",SerialNo = "20001"};
GetIntask intask1 = new GetIntask() { ContainerCode = "123", SerialNo = "20001" };
Stock stock1 = new Stock(){BinCode = "123123",BinName = "12312",EntryTM = "asasf",UldId = "asfasf"};
XmlList lists = new XmlList();
lists.DATALIST = new List<Data>();
lists.DATALIST.Add(intask);
lists.DATALIST.Add(intask1);
lists.DATALIST.Add(stock1);
XmlBody xmlByBody = new XmlBody();
xmlByBody.Head = head;
xmlByBody.Dataset = lists;
string s = XMLUtil.ObjectToXmlSerializer(xmlByBody);
}
public static string ObjectToXmlSerializer(Object obj)
{
XmlWriterSettings settings = new XmlWriterSettings();
//要求缩进
settings.Indent = true;
//注意如果不设置encoding默认将输出utf-16
//注意这儿不能直接用Encoding.UTF8如果用Encoding.UTF8将在输出文本的最前面添加4个字节的非xml内容
settings.Encoding = new UTF8Encoding(false);
settings.NewLineChars = Environment.NewLine;
using (MemoryStream ms = new MemoryStream())
{
using (StringWriter writer = new StringWriter())
{
//Type[] types = new[] {typeof(Stock),typeof(GetIntask),typeof(XmlList)};
XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType());
xmlSerializer.Serialize(writer, obj);
StringBuilder sb = writer.GetStringBuilder();
sb.Replace("utf-16", "utf-8");
sb.Replace("<DATASETS xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">", "<DATASETS>");
return sb.ToString();
}
// XmlWriter writer = XmlWriter.Create(ms, settings);
//Type[] types = new[] {typeof (XmlList), typeof (GetIntask), typeof (List<Data>), typeof (Data)};
}
}
<?xml version='1.0' encoding='utf-8'?>
<DATASETS>
<HEAD>
<USER><![CDATA[1]]></USER>
<PASSWORD><![CDATA[2]]></PASSWORD>
<!-- 下面可能出现可能不出现 -->
<U1><![CDATA[3]]></USER>
<P2><![CDATA[4]]></PASSWORD>
</HEAD>
<DATASET>
<DATALIST>
<!-- data 有多种 他们都叫data 写出了2种 这些data在一次xml只会出现一种 但可能是多次 就是data1出现了data2就不会出现 -->
<!-- data1 可能会出现1次或者多次 -->
<DATA>
<TASKID><![CDATA[18]]></TASKID>
<FLAG><![CDATA[3]]></FLAG>
<READTM><![CDATA[2014-12-09 08:38:08]]></READTM>
<CONFIRMTM><![CDATA[2014-12-09 08:39:10]]></CONFIRMTM>
</DATA>
<DATA>
<TASKID><![CDATA[17]]></TASKID>
<FLAG><![CDATA[3]]></FLAG>
<READTM><![CDATA[2014-12-09 08:38:08]]></READTM>
<CONFIRMTM><![CDATA[2014-12-09 08:39:10]]></CONFIRMTM>
</DATA>
<!-- data2 可能会出现1次或者多次 -->
<DATA>
<BINCODE><![CDATA[031302]]></BINCODE>
<BINNAME><![CDATA[031302]]></BINNAME>
<ULDID><![CDATA[000370]]></ULDID>
<ENTRYTM><![CDATA[2014-12-09 08:38:08]]></ENTRYTM>
</DATA>
</DATALIST>
</DATASET>
</DATASETS>
public class XMLModel : Data
{
[XmlElement("WAREHOUSECODE")]
public string Warehouse { get; set; }
[XmlElement("DEVICECODE")]
public string Devicecode { get; set; }
[XmlElement("FAULTCODE")]
public string Faultcode { get; set; }
[XmlElement("BEGINTM")]
public string Begintm { get; set; }
}
public class XMLHead : Data
{
[XmlElement("USER")]
public string User { get; set; }
[XmlElement("PWD")]
public string Pwd { get; set; }
}
public class XMLSlot : Data
{
[XmlElement("BINCODE")]
public string BinCode { get; set; }
[XmlElement("BINNAME")]
public string BinName { get; set; }
[XmlElement("ULDID")]
public string Uldid { get; set; }
[XmlElement("ENTRYTM")]
public string Entrytm { get; set; }
}
public class XMLTask : Data
{
[XmlElement("TASKCODE")]
public string Taskcode { get; set; }
[XmlElement("SUBTASKCODE")]
public string Subtaskcode { get; set; }
[XmlElement("PRODUCTCODE")]
public string Productcode { get; set; }
[XmlElement("DESTBIN")]
public string Destbin { get; set; }
[XmlElement("QTY")]
public string Qty { get; set; }
[XmlElement("STATE")]
public string State { get; set; }
//执行单元
[XmlElement("OPUNIT")]
public string Opunit { get; set; }
[XmlElement("BEGINTM")]
public string Begintm { get; set; }
[XmlElement("ENDTM")]
public string Endtm { get; set; }
}
[XmlInclude(typeof(XMLSlot))]
[XmlInclude(typeof(XMLModel))]
[XmlInclude(typeof(XMLTask))]
public class Data{}
public class XMLList
{
private List<Data> _DATALIST = new List<Data>();
[XmlArrayItem("DATA")]
public List<Data> DATALIST
{
get { return _DATALIST; }
set { _DATALIST = value; }
}
}
[XmlRoot("DATASETS")]
[Serializable]
public class XMLBody
{
private XMLHead[] head;
[XmlElement(ElementName = "HEAD")]
public XMLHead[] Head
{
get { return head; }
set { head = value; }
}
private List<XMLList> dataset;
[XmlElement("DATASET")]
public List<XMLList> Dataset
{
get { return dataset; }
set { dataset = value; }
}
}
//例子
private void Form1_Load(object sender, EventArgs e)
{
try
{
XmlSerializer xs = new XmlSerializer(typeof(XMLBody));
System.IO.MemoryStream ms = new MemoryStream();
XMLModel model = new XMLModel() { Begintm = "Begintm", Devicecode = "Devicecode", Faultcode = "Faultcode", Warehouse = "Warehouse" };
XMLHead head = new XMLHead() { User = "wp", Pwd = "123" };
XMLSlot slot = new XMLSlot() { BinCode = "BinCode", BinName = "BinName", Entrytm = "Entrytm", Uldid = "Uldid" };
XMLTask task = new XMLTask() { Begintm = "Begintm", Destbin = "Destbin", Endtm = "Endtm", Productcode = "Productcode", Opunit = "Opunit", Qty = "Qty", State = "State", Subtaskcode = "Subtaskcode", Taskcode = "Taskcode" };
List<XMLList> list = new List<XMLList>();
XMLList modelList = new XMLList();
modelList.DATALIST.Add(model);
list.Add(modelList);
XMLList slotlList = new XMLList();
slotlList.DATALIST.Add(slot);
list.Add(slotlList);
XMLList taskList = new XMLList();
taskList.DATALIST.Add(task);
list.Add(taskList);
XMLBody body = new XMLBody();
body.Dataset = list;
XMLHead[] Head = new XMLHead[1];
Head[0] = head;
body.Head = Head;
xs.Serialize(ms, body);
string str = System.Text.Encoding.Default.GetString(ms.ToArray());
}
catch (Exception ex)
{
throw ex;
}
}
有些改动,不知道行不行