gpt4 book ai didi

.net - System.Uri实现ISerializable,但给出错误?

转载 作者:行者123 更新时间:2023-12-04 03:02:51 26 4
gpt4 key购买 nike

这个问题已经在这里有了答案:




已关闭8年。




Possible Duplicate:
How to (xml) serialize a uri



据我所知, Uri实现了ISerializable,但是像这样使用时会引发错误:
XmlSerializer xs = new XmlSerializer(typeof(Server));
xs.Serialize(Console.Out, new Server { Name = "test", URI = new Uri("http://localhost/") });

public class Server
{
public string Name { get; set; }
public Uri URI { get; set; }
}
如果将 Uri类型更改为 string,则效果很好。
谁知道是罪魁祸首吗?

安东·戈戈列夫(Anton Gogolev)提出的解决方案:
public class Server
{
public string Name { get; set; }

[XmlIgnore()]
public Uri Uri;

[XmlElement("URI")]
public string _URI // Unfortunately this has to be public to be xml serialized.
{
get { return Uri.ToString(); }
set { Uri = new Uri(value); }
}
}
(感谢SLaks也指出了我方法的落后之处...)
产生XML输出:
<Server>
<URI>http://localhost/</URI>
<Name>test</Name>
</Server>
我在这里重写了代码,因此可见。

最佳答案

为了序列化为XML,Uri类应具有无参数的构造函数,而该构造函数应没有:Uri被设计为不可变的。老实说,我不明白为什么没有不带参数的构造函数就无法序列化它。

为了避免这种情况,可以将URI属性类型更改为string,或添加另一个名为_URI的属性,将URI标记为XmlIgnoreAttribute,并将其get方法重写为get { return new Uri(_URI); }

关于.net - System.Uri实现ISerializable,但给出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1594042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com