java xmlserializer_XmlSerializer - 反映类型时出错

如果您需要处理特定属性(即Dictionary或任何类),您可以实现IXmlSerialiable接口,这将允许您以更冗长的编码为代价获得更多自由 .

public class NetService : IXmlSerializable

{

#region Data

public string Identifier = String.Empty;

public string Name = String.Empty;

public IPAddress Address = IPAddress.None;

public int Port = 7777;

#endregion

#region IXmlSerializable Implementation

public XmlSchema GetSchema() { return (null); }

public void ReadXml(XmlReader reader)

{

// Attributes

Identifier = reader[XML_IDENTIFIER];

if (Int32.TryParse(reader[XML_NETWORK_PORT], out Port) == false)

throw new XmlException("unable to parse the element " + typeof(NetService).Name + " (badly formatted parameter " + XML_NETWORK_PORT);

if (IPAddress.TryParse(reader[XML_NETWORK_ADDR], out Address) == false)

throw new XmlException("unable to parse the element " + typeof(NetService).Name + " (badly formatted parameter " + XML_NETWORK_ADDR);

}

public void WriteXml(XmlWriter writer)

{

// Attributes

writer.WriteAttributeString(XML_IDENTIFIER, Identifier);

writer.WriteAttributeString(XML_NETWORK_ADDR, Address.ToString());

writer.WriteAttributeString(XML_NETWORK_PORT, Port.ToString());

}

private const string XML_IDENTIFIER = "Id";

private const string XML_NETWORK_ADDR = "Address";

private const string XML_NETWORK_PORT = "Port";

#endregion

}

有一个有趣的article,它显示了一种优雅的方式来实现一种复杂的方式来实现XmlSerializer .1505708_ .

文章说:

IXmlSerializable包含在官方文档中,但文档声明它不是供公众使用的,除此之外不提供任何信息 . 这表明开发团队希望保留修改,禁用甚至完全删除此可扩展性挂钩的权利 . 但是,只要你愿意接受这种不确定性并处理未来可能发生的变化,就没有任何理由你无法利用它 .

因为这个,我建议你实现自己的 IXmlSerializable 类,以避免太复杂的实现 .

...使用反射实现我们的自定义 XmlSerializer 类可能很简单 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值