【问题标题】:Xml Content Changed After Serialization & DeSerialization序列化和反序列化后更改的 Xml 内容
【发布时间】:2013-09-18 18:30:37
【问题描述】:

我更新了问题@ xml content changed after serialization & deserialization want to pass in xml to map object

感谢任何帮助。非常感谢。

我对所有这些都不熟悉: 我正在尝试将 xml 文件从 web 应用程序浏览按钮传递到服务,调用然后运行它。

我搜索并执行了以下操作:

string InputFilePath = FileUpload1.PostedFile.FileName;

MyServiceTypeClass _MyServiceTestObj = new MyServiceTypeClass ();
XmlSerializer SerializerObj = new XmlSerializer(typeof(MyServiceTypeClass ));
StreamWriter WriteFileStream = new StreamWriter(@InputFilePath);
SerializerObj.Serialize(WriteFileStream, _MyServiceTestObj );
WriteFileStream.Close();

FileStream XmlStream = new FileStream(@InputFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
MyServiceTypeClass _ServiceTypeLoaded = (MyServiceTypeClass )SerializerObj.Deserialize(XmlStream);
XmlStream.Close();

在我运行它并上传一个xml文件后,我发现_ServiceTypeLoaded字段几乎都是空的。运行上述几行后,xml 文件内容已更改。 _ServiceTypeLoaded只有3个字段没有null,并且xml文件已经更改为其他格式,缺少很多标签。

更多细节:
MyServicetypeClass结构:
MyServiceTypeClass继承自A类并有一些自己的成员; A 类继承自 B 类并有一些自己的成员; B 类继承自 C 类,并有一些自己的成员等。关系中有 5 层。

【问题讨论】:

  • 您能提供更多代码吗?喜欢MyServiceTypeClass
  • 这几乎可以肯定是由于在您的类上错误使用了序列化属性...尝试将您的情况简化为具有几个成员的一级继承...如果您仍然有问题,您可以发布您的简单可重现问题以供其他人帮助。您还可以考虑使用 DataContractSerializer 作为通常首选的序列化类,在这种情况下属性会有所不同,但是您对 XML 的形式的控制较少。
  • 非常感谢。就我而言,传入的 xmls 已经过预处理以适应服务类型。我只想传入 xmls 并将其中存储的 vales 提供给 C# 中的对象。在这种情况下,我是否需要同时进行序列化和反序列化?还是其中一个就足够了?无论如何,我有没有一种简单的方法来序列化它?由于有许多服务类类型,如果我为每个类型手动序列化,将会有太多的工作。非常感谢。
  • 听起来你想将一些提供的 xml 反序列化为一个对象。通常,要么首先编写类并考虑序列化,要么从序列化的示例数据或已发布的 xml 消息格式的 XSD 自动生成类。如果您不在这两种情况下,我不确定是否有任何自动方法可以将 xml 反序列化为您的类。我认为你不能在不添加序列化属性的情况下对你的类使用 .net 序列化,除非它们已经存在(你没有发布你的类)。也许一些第 3 方工具会有用?我不知道

标签: c# xml xml-serialization xml-deserialization


【解决方案1】:

使用 Xslt 将输入的 xml 转换为所需的 xml 格式,然后将其用作输入变量

【讨论】:

    猜你喜欢
    • 2017-08-14
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多