c# - DataContractSerialiser 和 Serializable 的问题

标签 c# serialization reference datacontractserializer xmlserializer

我有几个来自 .Net 2.0 程序集的类。这些类标有可序列化。

在我的项目中,我在我的类中使用了这些类,这些类用 DataContract(IsReference=true) 和 DataMember 标记。

现在我遇到了问题,DataContractSerialiser 序列化了我的 .Net 2.0 类的私有(private)字段,这将不起作用。但是当我使用 XMLSerialiser 时,我不能使用 IsReference,所以我也不能这样做。

是否有一个简单(简单)的解决方案?也许某人有自己的支持引用的 XMLSerializer?

这是我的一些代码:

[DataContract(IsReference = true)]
public class ConnectionConfig: INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
            PropertyChanged(this, new PropertyChangedEventArgs("ObjectAsString"));
        }
    }

    private PLCConnectionConfiguration _configuration;
    [DataMember]
    public PLCConnectionConfiguration Configuration
    {
        get { return _configuration; }
        set { _configuration = value; NotifyPropertyChanged("Configuration"); }
    }
}

其中 PLCConnectionConfiguration 来自 .NET 2.0 程序集,并装饰有 [Serializeable]

最佳答案

[DataContract] 注释类型应该足以告诉它查找标记为 [DataMember] 的成员 - 但听起来你可能有以下组合数据契约(Contract)和原始对象。

如果您确实需要 xml,我的建议是编写一组 DTO 类型并在图形模式下使用 DCS。这可能需要在您的对象模型和 DTO 之间进行一些映射;但这通常不是什么大问题。另请注意,图形模式下的 DCS 不是典型的 xml 输出 - 它与 XmlSerializer 的输出非常不同。

如果您只需要序列化任意类型(xml 不是问题),那么 protobuf-net 当前的实验 剪辑支持所有这些场景;它将处理对象引用,并且允许您使用带注释的类型和原始类型(您只需要告诉它如何操作)。如果这是一个选项,也许可以提供您的模型的基本示例,我也许可以填补一些空白。

关于c# - DataContractSerialiser 和 Serializable 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5270895/

相关文章:

c# - Entity Framework 和数据库连接

c# - 我在 C# 中选择 k 元素子集来处理大量数据的算法

c# - 强制 protobuf-net 忽略 IEnumerable/ICollection 接口(interface)

visual-studio-2010 - 具有大量引用资料的数据库项目

c++ - 学习 C++ : returning references AND getting around slicing

c# - 如何在Windows中运行应用程序?

c# - 多个 AddParameter 调用只添加第一个参数,忽略其余参数

json - 使用关联序列化实体

serialization - 使用 Doctrine MongoDB ODM 进行文档序列化

c++ - 一个 VS2010 错误?允许在没有警告的情况下绑定(bind)对右值的非常量引用?