Kon*_*nev 90 .net c# xml-serialization
我有一个可序列化的类,我的类中的一个属性在Guidgetter中生成一个.该属性不实现setter,并在序列化期间忽略.为什么这样,我总是必须实现一个setter才能序列化我的属性.
[Serializable]
public class Example
{
[XmlAttribute("id")]
public string Id
{
get
{
return Guid.NewGuid().ToString();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试实现一个空的setter并正确序列化.
[Serializable]
public class Example
{
[XmlAttribute("id")]
public string Id
{
get
{
return Guid.NewGuid().ToString();
}
set {}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
你能指出我应该如何定义值永远不会改变的属性或者内部生成值的属性?
Jam*_*mes 55
这是一个限制,XmlSerializer它没有序列化只读属性,你在第二个例子中所做的基本上是让它序列化的黑客,但是,如果你需要它以后反序列化它是没用的.
或者你可以切换到使用DataContractSerializer,它更灵活.
Joh*_*ers 10
请参阅MSDN文档中的" XML序列化简介 ".除其他外,它说:
可以序列化的项目
可以使用XmlSerializer类序列化以下项:
Run Code Online (Sandbox Code Playgroud)Public read/write properties and fields of public classes. Classes that implement ICollection or IEnumerable.注意:
Run Code Online (Sandbox Code Playgroud)Only collections are serialized, not public properties.Run Code Online (Sandbox Code Playgroud)XmlElement objects. XmlNode objects. DataSet objects.
另请参阅" 为什么XML-Serializable类需要无参数构造函数 "
除了可以通过XML Serializer序列化的上述类型之外,任何实现IXmlSerializable接口的类型都可以被序列化和反序列化.特别是,这意味着可以序列化XElement和XDocument类型.
请参阅" IXmlSerializable接口 ".
限制XMLSerializer- 没有setter的属性无法序列化.
但你可以DataContractSerializer用来序列化private setter properties-
[DataMember]
public string Id
{
get
{
return Guid.NewGuid().ToString();
}
private set {}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66172 次 |
| 最近记录: |