我想serialize和deserialize对象,而不必担心整个类图表。

灵活性是关键。我希望能够化的任何对象,通过我没有完全属性,需要在整个整个的对象图。

这意味着二进制序列化 是不是一种选择,因为它只适用 其他。网平台。我 也喜欢的东西可读的 人,并因此通过实在令人费解的 管理程序和其他 口译员。

我已经找到问题所采用的DataContract,式,并XML序列化程序。

  • 大多数的这些错误似乎对中心周围序列的清单/词典(即 XML序列化的通用字典).
  • "添加任何类型不知静 清单已知类型的-对 例如,通过使用 KnownTypeAttribute属性或通过 把它们添加到名单所知 类型过来 DataContractSerializer."

请是基于你的答案在实际经验并不是理论或阅读的一篇文章。

有帮助吗?

解决方案

你有没有考虑顺序叉,而不是XML?

Json.NET 有一个真正强大和灵活的程序,没有任何问题Hashtables/通用字典,并不需要任何特定的属性。我知道因为我写了:)

它给你堆的控制通过的各种选择的程序,它可以复盖如何类型的化通过创建一个JsonConverter。

在我看来JSON是更多的人可读于XML和Json.NET 给出选项可以写很好的注.

最后,该项目是开放源,所以你可以进入代码和进行修改,如果您需要。

其他提示

如果我记得它的作品像这样的东西有财产:

[XmlArray("Foo")]
[XmlArrayItem("Bar")]
public List<BarClass> FooBars
{ get; set; }

如果你化了这个你想得到的东西,如:

<Foo>
    <Bar />
    <Bar />
</Foo>

当然,我也许应该推迟到专家。这里的更多信息,从MS: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlarrayitemattribute.aspx

让我知道如果这工作了你。

从你的要求这听起来像Xml化是最好的。

什么样的问题你必须集合时的顺序?如果你指的是不知道什么样的属性使用上名单或类似的东西,你可以尝试 XmlArray属于你的财产。你绝对可以serialize一个集合。

该IntermediateSerializer在部署框架是太酷了。你可以找到一堆教程使用它 http://blogs.msdn.com/shawnhar

肥皂化的工作以及对我来说,甚至对象没有标记与[序列化]

你会有问题的收集化,如果目的在收集有包含任何参考其他的对象相同的集合。如果任何类型的双向的存在,则最终创建一个多的地图,无法以串行的。在每一个问题我曾将一个自定义收集的,它是总是因为一些附加的功能我需要这工作的现的一部分作为一个"典型的"客户机-服务器应用程序,然后惨遭失败的一部分作为消费者提供商的服务器应用程序。

把所有课程要化为一个单独的组件,然后使用sgen工具以产生一系列化会serialize于XML。使用XML属性控制序列化。

如果你需要定制的系列化会(和你 需要得到支持的类不IXmlSerializable和类包含抽象的节点),然后指示sgen倾倒的源代码成一个单独的文件,然后将其添加到解决方案。然后你可以修改作必要的。

http://msdn.microsoft.com/en-us/library/bk3w6240(VS。80).aspx

总的来说,我已经设法serialize整个AdsML框架(超过400个班)使用这种技术。它的确需要大量的手工制,但是没有得到解决,如果你考虑一个大的框架。(I使用一个单独的工具,从划为C#)

我同意DataContract基于化方法(以式,XML等)是一个比较复杂的比我喜欢的。

如果你试图让JSON检查了 http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

它的一部分MS阿贾克斯的扩展。诚然,这是标记为已过时。净3.5但ScottGu提到了在他的博客在这里评论(http://weblogs.asp.net/scottgu/archive/2007/10/01/tip-trick-building-a-tojson-extension-method-using-net-3-5.aspx#4301973),他不知道为什么和应该支持时间长一点。

最简单的事做为标记的物体的序列化属性,然后使用二元格式来处理的系列化。整个班图不应该是一个问题提供任何包含的对象也是标记为序列化。

也许是一个更有效的路线就是serialize使用BinaryFormatter

作为复制 http://blog.paranoidferret.com/index.php/2007/04/27/csharp-tutorial-serialize-objects-to-a-file/

using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

public class Serializer
{
   public Serializer()
   {
   }

   public void SerializeObject(string filename,
                  ObjectToSerialize objectToSerialize)
   {
      Stream stream = File.Open(filename, FileMode.Create);
      BinaryFormatter bFormatter = new BinaryFormatter();
      bFormatter.Serialize(stream, objectToSerialize);
      stream.Close();
   }

   public ObjectToSerialize DeSerializeObject(string filename)
   {
      ObjectToSerialize objectToSerialize;
      Stream stream = File.Open(filename, FileMode.Open);
      BinaryFormatter bFormatter = new BinaryFormatter();
      objectToSerialize =
         (ObjectToSerialize)bFormatter.Deserialize(stream);
      stream.Close();
      return objectToSerialize;
   }
}

对于互操作性,我们必须总是使用Xml电子监管,并确保我们班的目的是从地上爬起来正确地做到这一点。

我们创建了一个文件架构的文件和产生的一个组类使用XSD.exe.此产生分类如此然后,我们创造一套对应部分类添加额外的方法,我们想要帮助我们填充的课程和使用他们在我们的应用(因为他们都集中在serialising和deserialising和一位处境使用的有时).

你应该使用NetDataContractSerializer.它涵盖任何种类的对象图,并支持泛型、列表、多态性(该KnownType属性是这里不需要),递归等。唯一的缺点是,你需要标记所有你的课[序列化]/[DataContract]属性的,但经验显示你必须做的某种手微调,无论如何因为不是所有成员应该持续存在。此外,它将成为一种Xml,虽然其可读性是值得怀疑的。

我们有相同的要求作为你选择了这个的解决方案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top