【问题标题】:XML - Serialize class - Some questionsXML - 序列化类 - 一些问题
【发布时间】:2014-04-22 11:39:33
【问题描述】:

我的想法是将类的属性序列化为 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 文件中的每个 XML“对”执行此操作,但我无法在脑海中获得正确的结构。 我应该在这里列出清单还是应该怎么做? 我真的希望我能解释清楚一点,这很难解释。 我也不知道如何通过附加来做到这一点。有什么建议吗?

如果您有任何问题,请提问

【问题讨论】:

  • 漂亮的问题标题:)
  • 我想了 5 分钟还是不知道 :) 如果我想出它,我会建议编辑。

标签: c# xml serialization


【解决方案1】:

您正在寻找的不仅仅是序列化。您想多次序列化同一个对象对吗?

一个可能的解决方案是序列化 List&lt;MyClass&gt; 并在文件存在时将新实例附加到列表中。

【讨论】:

    【解决方案2】:

    简而言之,没有内置的方法可以满足您的需求。但是,这并不意味着它不能完成......

    最简单、最接近的内置方法是维护一个List&lt;MyClass&gt;,您可以在上传/下载等时更新它并进行序列化。但是,这不会得到您想要的确切 XML,这会产生类似于

    <ListOfMyClass>
        <MyClass>
            <Property>1</Property>
            ...
        </MyClass>
        <MyClass>
            <Property>2</Property>
            ...
        </MyClass>
    </ListOfMyClass>
    

    更复杂的方法是让MyClass 实现IXmlSerializable 并覆盖WriteXml/ReadXml 的行为来处理您的自定义XML 格式。

    【讨论】:

    • 好的,谢谢您的建议。那我就这么干了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2012-03-27
    • 2011-06-07
    • 1970-01-01
    相关资源
    最近更新 更多