C# 从对象序列化为XML字符串(复杂类型和列表)

C# 从对象序列化为XML字符串(复杂类型和列表),c#,xml,serialization,C#,Xml,Serialization,祝你们好,堆栈溢出的居民们 Noob程序员又问了一个愚蠢的问题。在完成一个非常大的项目时遇到问题,我从一个未经通知就离开的人那里继承了这个项目。该应用程序是一个Web爬虫程序,它跟踪国际海运,然后通过soap服务API将生成的跟踪事件提供给物流系统(Magaya Cargo system) 事件数据是Shipping XML文件本身中的一个节点,Magaya API有一个特殊的方法,我可以用来插入这些事件。基本上,SetTransactionEvents方法允许我指定装运编号,并向其传递与该装运

祝你们好,堆栈溢出的居民们

Noob程序员又问了一个愚蠢的问题。在完成一个非常大的项目时遇到问题,我从一个未经通知就离开的人那里继承了这个项目。该应用程序是一个Web爬虫程序,它跟踪国际海运,然后通过soap服务API将生成的跟踪事件提供给物流系统(Magaya Cargo system)

事件数据是Shipping XML文件本身中的一个节点,Magaya API有一个特殊的方法,我可以用来插入这些事件。基本上,
SetTransactionEvents
方法允许我指定装运编号,并向其传递与该装运相关的事件的XML字符串。我的问题是,当我试图将事件序列化为XML字符串时,我无法以正确的结构形成XML,而该结构正是该方法所期望的,从而导致崩溃。我尝试了几种不同的方法,但我很难理解这些事件使用的复杂类型

这是我的代码,第一个调用我的序列化方法的代码。为了保持简洁,我省略了从webcrawler跟踪结果中设置值的部分。没什么大不了的,只是一堆
webeventDate=classeventDate
…等等:

EventType cur_event=new EventType();
EventDefinitionType eventDefinition=新的EventDefinitionType();
//cur_事件对象的所有字段都在此处设置。。。
插入Ventomagaya(cur_事件);
请参阅下面的代码片段,其中显示了我的代码的序列化部分,目前在中有一些虚拟变量:

public void insertentomagaya(事件类型currentEvent)
{
MagayaApi=新MagayaApi();
尝试
{
XmlSerializer serializer=新的XmlSerializer(typeof(EventType));
StringBuilder结果=新建StringBuilder();
使用(var writer=XmlWriter.Create(result))
{
serializer.Serialize(writer,currentEvent);
api.Cs.StartSession(api.User、api.Password、out-int-Key);
api.Cs.SetTransactionEvents(键0x00080000,“SH”,“DUMMY999”,result.ToString(),输出字符串错误);
api.Cs.EndSession(密钥);
}
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
投掷;
}
}
另一个XML字符串的示例(当然是虚拟数据):


2016-04-05T19:34:08+05:30
扫描
孟买
扫描的货物
真的
真的
嘘
162-78958749
da3782e1-824b-4824-8ec2-0d38b032ab19
提供C#字段定义和XML属性的类:

//
[System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”,“4.6.1055.0”)]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(命名空间=”http://www.magaya.com/XMLSchema/V1")]
[System.Xml.Serialization.XmlRootAttribute(“事件”,命名空间=”http://www.magaya.com/XMLSchema/V1“,IsNullable=false)]
公共部分类事件列表
{
私有事件类型[]事件字段;
/// 
[System.Xml.Serialization.XmlElementAttribute(“事件”)]
公共事件类型[]事件
{
得到
{
返回此.eventField;
}
设置
{
this.eventField=值;
}
}
}
/// 
[System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”,“4.6.1055.0”)]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(命名空间=”http://www.magaya.com/XMLSchema/V1")]
[System.Xml.Serialization.XmlRootAttribute(“事件”,命名空间=”http://www.magaya.com/XMLSchema/V1“,IsNullable=false)]
公共部分类EventType
{
private System.DateTime日期字段;
私有字符串详细信息字段;
私有字符串定位字段;
私有事件定义类型事件定义字段;
私有布尔值包括跟踪字段;
专用布尔值,包括指定的IntrackingField;
私有字符串所有者类型字段;
私有字符串所有者导向字段;
私有字符串OwnerNumber字段;
私有字符串所有者字段;
/// 
public System.DateTime日期
{
得到
{
返回此.dateField;
}
设置
{
this.dateField=值;
}
}
/// 
公共字符串详细信息
{
得到
{
返回此.details字段;
}
设置
{
this.detailsField=值;
}
}
/// 
公共字符串位置
{
得到
{
返回此.locationField;
}
设置
{
this.locationField=值;
}
}
/// 
公共事件定义类型事件定义
{
得到
{
返回此.EventDefinition字段;
}
设置
{
this.eventDefinitionField=值;
}
}
/// 
公共图书馆,包括追踪
{
得到
{
返回此.includeInTrackingField;
}
设置
{
this.includeInTrackingField=值;
}
}
/// 
[System.Xml.Serialization.XmlIgnoreAttribute()]
公共bool包括指定的跟踪
{
得到
{
返回指定的此.includeIntrackingField;
}
设置
{
this.includeInTrackingFieldSpecified=值;
}
}
/// 
公共字符串所有者类型
{
得到
{
返回此.ownerTypeField;
}
设置
{
this.ownerTypeField=值;
}
}
/// 
公共字符串OwnerGUID
{
得到
{
返回此.ownerGUIDField;
}