Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 序列化后xml内容发生更改&;要将xml传入映射对象的反序列化_C#_Xml_Object_Xml Serialization_Xml Deserialization - Fatal编程技术网

C# 序列化后xml内容发生更改&;要将xml传入映射对象的反序列化

C# 序列化后xml内容发生更改&;要将xml传入映射对象的反序列化,c#,xml,object,xml-serialization,xml-deserialization,C#,Xml,Object,Xml Serialization,Xml Deserialization,请帮助: 我需要做的是:从浏览器栏传入一个XML文件,然后尝试将XML文件中的数据映射到类中的对象类型 有许多不同的对象类型,所以如果我为每个序列化和反序列化编写类,那将是太多的工作 我搜索了一些用于序列化和反序列化的代码,并尝试了它们,它们可以编译,但许多数据都丢失了 我的序列化和反序列化代码如下: string InputFilePath = FileUpload1.PostedFile.FileName; MyServiceTypeClass _MyServiceTestObj = ne

请帮助:

我需要做的是:从浏览器栏传入一个XML文件,然后尝试将XML文件中的数据映射到类中的对象类型

有许多不同的对象类型,所以如果我为每个序列化和反序列化编写类,那将是太多的工作

我搜索了一些用于序列化和反序列化的代码,并尝试了它们,它们可以编译,但许多数据都丢失了

我的序列化和反序列化代码如下:

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();
MyServiceTypeClass定义:

public class MyServiceType: UpperLevel1
    {
        [DataMember]
        public TypeDefinition Definition;
        [DataMember]
        public Type Type;
        [DataMember]
        public string a;
        [DataMember]
        public double? b;
    }

public class UpperLevel1: UpperLevel2
    {
        [DataMember(IsRequired = true)]
        public double a;
        [DataMember]
        public double? b;
        [DataMember]
        public double? c;
        [DataMember]
        public double? d;
        }

etc until 5 levels
原始Xml是:

<?xml version="1.0" encoding="utf-8" ?>
<ns0:BondTransaction xmlns:ns0="ABC" xmlns:ns1="http://schemas.microsoft.com/2003/10/Serialization/">
  <ns0:a>0</ns0:a>
  <ns0:m1>Something</ns0:m1>
  <ns0:b>Remain1</ns0:b>
  <ns0:m2> Something </ns0:m2>
   <ns0:m2a>
     <ns0:m2b>
       <ns0:m2c>
         <ns0:m2d>
          <ns0:m2d1>Position</ns0:m2d1>
          <ns0:m2d2>BAR</ns0:m2d2>
        </ns0:m2d>
      </ns0:m2c>
      <ns0:m2b2>Remain2</ns0:m2b2>
    </ns0:m2b>
  </ns0:m2a>
  <ns0:m3>12345</ns0:m3>
  <ns0:m4>SomeCOMPANY</ns0:m4>
  <ns0:m5>TRAD</ns0:m5>
  <ns0:m6>12345</ns0:m6>
  <ns0:m7>Time</ns0:m7>
  <ns0:SomeDesign>
     <ns0:Property>
      <ns0:Type>type1</ns0:Type>
      <ns0:Value>somevalue</ns0:Value>
    </ns0:Property>
  </ns0:SomeDesign>
  <ns0:Price>1</ns0:Price>
  <ns0:QuotationCurrency>USD</ns0:QuotationCurrency>
   <ns0:SomeOtherDesign>
     <ns0:Property>
      <ns0:Type>typ2</ns0:Type>
      <ns0:Value>gfgg</ns0:Value>
    </ns0:Property>
     <ns0:Property>
      <ns0:Type>fer</ns0:Type>
      <ns0:Value>getrt</ns0:Value>
    </ns0:Property>
  </ns0:SomeOtherDesign>
  <ns0:Exchange>hmmm</ns0:Exchange>
</ns0:BondTransaction>

0
某物
剩余的
某物
位置
酒吧
剩余2
12345
某公司
贸易
12345
时间
类型1
一些价值
1.
美元
类型2
gfgg
费尔
格特
六羟甲基三聚氰胺六甲醚
xml如下所示:

<?xml version="1.0" encoding="utf-8" ?>
- <big xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <a>0</a>
  <b>INSERT</b>
  <g xsi:nil="true" />
  <r xsi:nil="true" />
  <rw>AGAINST</rw>
  <rwer xsi:nil="true" />
  <gfg>TRAD</gfg>
  <a xsi:nil="true" />
  <b xsi:nil="true" />
  <c xsi:nil="true" />
  <d xsi:nil="true" />
  <e xsi:nil="true" />
  <f xsi:nil="true" />
  <h xsi:nil="true" />
  <sd xsi:nil="true" />
  <s xsi:nil="true" />
  <gf>0</gf>
  <y xsi:nil="true" />
  <ted xsi:nil="true" />
  <ty xsi:nil="true" />
  <yt xsi:nil="true" />
  <uy>DEFAULT</uy>
  <tert xsi:nil="true" />
  <tr xsi:nil="true" />
</big>

- 
0
插入
反对
贸易
0
违约
有谁能告诉我出了什么问题,或者告诉我应该做什么来完成我的目标?非常感谢

byte[] byteArray = Encoding.UTF8.GetBytes(xmlContent);
MemoryStream tempMemoryStream = new MemoryStream(byteArray);
DataContractSerializer serializer = new DataContractSerializer(typeof(ClassType));
ClassType variableName= (ClassType)serializer.ReadObject(TempMemoryStream);

这适用于类型,使用数据协定序列化程序,将xml转换为流,然后对其进行反序列化。(在我的例子中,输入xml文件已经过预处理以匹配格式。感谢lee和所有帮助过我的人。干杯!:D

Post
MyServiceTypeClass
。我添加了定义。谢谢。是的,您有
[DataMember]
应用的序列化属性对应于
DataContractSerializer
…如果您想使用
XmlSerializer
,请使用不同的属性。非常感谢您的建议。您对如何推广它有什么想法吗?非常感谢