我的想法是将类的属性序列化为XML文件,然后将此文件上载到服务器。这是因为我想再次下载此文件并读出序列化内容。
这样的结构:
文件存在(myfile.xml) - >将类(myclass.cs)中的数据序列化到文件 - >上传文件。
现在内容可能如下所示:
<?xml version="1.0"?>
-<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SomeProperty>0.1.0.0</SomeProperty>
<SomePropertiesChild>Test</SomePropertiesChild>
</MyClass>
嗯,所以这不是问题,我已经构建了一个类来将数据序列化到文件中,所以看起来就像上面那样。
现在的问题是,我不知道该怎么做。我希望下次新数据能够像这样序列化,但它应该附加到该XML文件,而不是新文件。 因此,我下载此文件,然后将新数据序列化为附件,以便它看起来如下:
<?xml version="1.0"?>
-<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SomeProperty>0.1.0.0</SomeProperty>
<SomePropertiesChild>Test</SomePropertiesChild>
<!-- This is the part that should be attached -->
<SomeProperty>0.2.0.0</SomeProperty>
<SomePropertiesChild>Test2</SomePropertiesChild>
</MyClass>
这应该重复多次:下载文件,序列化新数据并将其附加到此数据,然后再次上传。 现在,第二点是,我想读出来。
为此,我也使用XML类。对于数据应该序列化的类型的类型参数,我设置包含属性的类。 但是现在,我的XML中有更多相同名称的节点,如上所述。我现在想把它分开。 因此,不仅是一个类,而且对于具有相同名称的每个节点都是一个新类。
告诉你更清楚一点:
在XML中我们有第一对(SomeProperty,SomePropertiesChild)。 现在应该将此序列反序列化为myclass.cs,其中包含XML节点的正确属性。例如:
public class MyClass
{
public Version SomeProperty {get; set;}
public string SomeProeprtiesChild {get; set;}
}
然后应该将第一个XML对反序列化为该类。 但我想为每个XML - &#34;对&#34;做这个。在我的XML文件中,但我无法在脑子里找到正确的结构。 我应该在这里制作清单还是应该如何做? 我真的希望我能够清楚地解释一下,这很难解释。 我也不知道如何通过附加来做到这一点。有什么提示吗?
如果您有疑问,请询问!
答案 0 :(得分:2)
您正在寻找的不仅仅是序列化。你想多次序列化同一个对象吗?
一种可能的解决方案是序列化List<MyClass>
并在文件存在时将新实例附加到列表中。
答案 1 :(得分:2)
简而言之,没有内置的方法来做你正在寻找的东西。但是,这并不意味着它无法完成......
最简单,最接近的内置方式是维护List<MyClass>
,只要您上传/下载等并进行序列化,就会更新<ListOfMyClass>
<MyClass>
<Property>1</Property>
...
</MyClass>
<MyClass>
<Property>2</Property>
...
</MyClass>
</ListOfMyClass>
。但是,这不会得到你想要的确切XML,这会产生类似
MyClass
更复杂的方法是让WriteXml
实施IXmlSerializable并覆盖ReadXml
/ {{1}}的行为来处理您的自定义XML格式。