【问题标题】:DataContractSerializer will not serialize protected propertiesDataContractSerializer 不会序列化受保护的属性
【发布时间】:2013-11-19 19:07:31
【问题描述】:

我将一个类的公共属性更改为受保护

public class SlideSet : UserModifiable.Properties, Validation.IValidateable
{
    public virtual ICollection<Slide> Slides { get; set; }

public class SlideSet : UserModifiable.Properties, Validation.IValidateable
{
    [DataMember]
    protected virtual ICollection<Slide> Slides { get; set; }

但现在 DataContractSerializer 不再将其序列化为 xml。我对from the docs 的印象是DataMember 属性是唯一必要的。

这是我的序列化实现

    public string ToXml(Object obj) {
        // set up DataContractSerializer to use the .NET ProxyDataContractResolver, which helps us to serialize EF objects
        var entityType = ObjectContext.GetObjectType(obj.GetType());
        var knownTypes = ObjectContext.GetKnownProxyTypes();
        var resolver = new ProxyDataContractResolver();
        var serializer = new DataContractSerializer(entityType, entityType.Name, string.Empty, knownTypes, 1000, true, true, null, resolver);

        // serialize to XML string
        var stream = new MemoryStream();
        serializer.WriteObject(stream, obj);
        stream.Seek(0, SeekOrigin.Begin);
        return Encoding.UTF8.GetString(stream.ToArray());
    }

为什么我的受保护属性没有被序列化?

【问题讨论】:

  • @JustinNiessner 不,应该如何使用?只要事情是公开的,这一切都很好
  • @JustinNiessner 确实有效,谢谢。尽管由于某种原因,xml 现在是一种截然不同的格式
  • 我将评论切换为答案,并将删除其他 cmets。

标签: c# .net xml-serialization datacontractserializer


【解决方案1】:

如果您希望使用 DataContractSerializer 正确序列化您的 XML,您不仅需要在每个序列化属性上使用 DataMemberAttribute,还需要在类本身上使用 DataContractAttribute

如文档中所述,两者齐头并进:

MSDN - DataContractSerializer

【讨论】:

  • 谢谢,知道为什么我生成的 xml 看起来不同吗? (为我的目的寻找,只是奇怪)
猜你喜欢
  • 2020-07-21
  • 2021-06-18
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 2020-03-31
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
相关资源
最近更新 更多