ATML中XML文档序列化与反序列化

 在研究ATML IEEE1671.1 TestDescription测试描述遇到两个问题:

1,用户如何能够方便快捷的生成标准的Atml文档(Xml序列化)

2,软件如何能够解析标准的Atml文档,还原出TestDescription对象方便后续操作(Xml反序列化)

捣鼓了一阵发现了一个类似JsonSerilialize的工具,针对Xml的序列化与反序列化的工具XmlSerialize

序列化过程与Json差不多,都是从派生类向基类序列化公有字段或者属性,并可以通过标签来影响序列化过程

这里用到TestDescription以及DocumentReference两个类来自于Atml组件中的TestDescription.xsd以及Common.xsd两个XML Schema,至于如何转换.xsd到.cs网上有很多方法,这里不做累赘。

 

这里我们将构建一个只包含UUT的一个简单的TestDescription实例来研究序列化过程

 


//添加需要生成的xml中的名称空间以及前缀
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("c", "urn:IEEE-1671:2010:Common");
ns.Add("hd", "urn:IEEE-1671:2010:HardwareCommon");
//创建XmlSerializer并指定类型为IEEE1671.1中的TestDescription
XmlSerializer serializer = new XmlSerializer(typeof(TestDescription));
TestDescription testDescription = new TestDescription();
//添加Common中的元素
testDescription.UUT.Description = new ItemDescriptionReference() { Item = new ATMLModelLibrary.model.common.DocumentReference() { ID = "123", uuid = "A0A7B49E - C227 - 405d - A337 - 991B701FA7CC}"  };
StreamWriter writer = new StreamWriter(@"C:\Users\Administrator\Desktop\WorkSpace\ATML\ATML\Demo1671.1.xml");
            serializer.Serialize(writer, testDescription, ns);

代码生成的1671.1文档部分如下所示:

<TestDescription xmlns:hd="urn:IEEE-1671:2010:HardwareCommon" xmlns:c="urn:IEEE-1671:2010:Common" xmlns="urn:IEEE-1671.1:2009:TestDescription">
  <UUT>
    <Description>
      <c:DescriptionDocumentReference ID="123" uuid="A0A7B49E - C227 - 405d - A337 - 991B701FA7CC" />
    </Description>

生成的文档跟预期效果一致,接下来来解析刚才生成的xml文档

解析过程很简单:

一,创建XmlSerializer对象

二,创建StreamReader对象

三,调用XmlSerialize对象中的Deserialize方法

 

string filename = @"C:\Users\Administrator\Desktop\WorkSpace\ATML\ATML\Demo1671.1.xml";
XmlSerializer serializer = new XmlSerializer(typeof(TestDescription));           
StreamReader reader = new StreamReader(filename);
TestDescription td = (TestDescription)serializer.Deserialize(reader);
ATMLModelLibrary.model.common.DocumentReference reference = td.UUT.Description.Item as ATMLModelLibrary.model.common.DocumentReference; 
this.id.Text = reference.ID;
this.uuid.Text = reference.uuid;
reader.Close();          

结果与xml文档中的内容一致

总结:序列化与反序列化过程,需要为我们的对象申明各种标签

例如:XmlTypeAttribute(Namespace = "urn:IEEE-1671:2010:Common"),XmlAttributeAttribute(),XmlElementAttribute()等等,幸运的是由.xsd生成.cs过程中已经帮我们添加好了这些标签,直接用即可。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值