C# DataContractSerializer不会序列化受保护的属性
我将一个类的公共属性更改为protectedC# DataContractSerializer不会序列化受保护的属性,c#,.net,xml-serialization,datacontractserializer,C#,.net,Xml Serialization,Datacontractserializer,我将一个类的公共属性更改为protected public class SlideSet : UserModifiable.Properties, Validation.IValidateable { public virtual ICollection<Slide> Slides { get; set; } 为什么我的受保护属性没有被序列化?如果您想用DataContractSerializer正确序列化XML,您不仅需要在每个序列化属性上使用DataMemberAttr
public class SlideSet : UserModifiable.Properties, Validation.IValidateable
{
public virtual ICollection<Slide> Slides { get; set; }
为什么我的受保护属性没有被序列化?如果您想用
DataContractSerializer
正确序列化XML,您不仅需要在每个序列化属性上使用DataMemberAttribute
,还需要在类本身上使用DataContractAttribute
如文件所述,这两项工作将齐头并进:
@JustinNiessner不,那应该怎么用?只要事情进展顺利,这一切都很好public@JustinNiessner那确实有用,谢谢。虽然由于某些原因,xml现在是一种明显不同的格式,但我将我的注释切换为答案,并将删除其他注释。谢谢,知道我生成的xml为什么看起来不同吗?(出于我的目的,我觉得很奇怪)
public class SlideSet : UserModifiable.Properties, Validation.IValidateable
{
[DataMember]
protected virtual ICollection<Slide> Slides { get; set; }
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());
}