Xml .net compact framework反序列化
我有一个.NET4类,它用一个只读属性装饰。 我试图在.NET Compact 3.5项目中序列化该类,但出现错误: “反映类型IpSettings时出错” 据我所知.NET CF不包含任何自定义属性,但我不需要序列化此属性。有没有办法跳过属性序列化? 谢谢 亚历克斯 var serializer=new System.Xml.Serialization.XmlSerializer(typeof(IpSettings))Xml .net compact framework反序列化,xml,serialization,compact-framework,custom-attributes,Xml,Serialization,Compact Framework,Custom Attributes,我有一个.NET4类,它用一个只读属性装饰。 我试图在.NET Compact 3.5项目中序列化该类,但出现错误: “反映类型IpSettings时出错” 据我所知.NET CF不包含任何自定义属性,但我不需要序列化此属性。有没有办法跳过属性序列化? 谢谢 亚历克斯 var serializer=new System.Xml.Serialization.XmlSerializer(typeof(IpSettings)) 您可以通过.NET CF中的属性控制xml序列化。要让序列化系统忽略属性,
您可以通过.NET CF中的属性控制xml序列化。要让序列化系统忽略属性,您可以使用XmlIgnore属性对其进行修饰:
public class IpSettings
{
[System.Xml.Serialization.XmlIgnore]
public string IP { get; set; }
public string Mask { get; set; }
public string Gateway { get; set; }
public string DNS1 { get; set; }
public string DNS2 { get; set; }
}
我发现,在尝试了解如何为紧凑框架解决某些问题时,我经常不得不重新思考如何处理问题 考虑下面的代码。它仍然允许字符串
IP
值为只读:
作为程序员,这将为您的类提供灵活性,同时仍然保持
IP
字段的只读属性。我想序列化IP属性,但不包含[readonly(true)]属性。[System.Xml.Serialization.XmlIgnore]将完全忽略序列化中的IP属性。抱歉,Alex。我完全误解了你的要求。我不确定您为什么需要您所要求的,因为xmlserialization不会序列化任何对象元数据,例如属性。我相信问题不在于序列化,而在于反射。当XmlSerializer试图反映IpSettings类时,它失败了,因为在.net CF中没有[ReadOnly]属性。这是我的猜测。我很难理解您如何将该类型加载到.NET CF应用程序中,因为您应该会遇到编译错误。如果您以某种方式动态加载它,您能否在类实现中围绕该属性放置一个预处理器指令(即#If!POCKET_PC[ReadOnly(true)]#endifHmm…我想您刚才给了我一个带有预处理器指令的idea!
public class IpSettings
{
[System.Xml.Serialization.XmlIgnore]
public string IP { get; set; }
public string Mask { get; set; }
public string Gateway { get; set; }
public string DNS1 { get; set; }
public string DNS2 { get; set; }
}
public class IpSettings
{
private string ip;
public IpSettings()
{
}
public IpSettings(string ipAddress)
{
ip = ipAddress;
}
public string IP { get { return ip; } }
public string Mask { get; set; }
public string Gateway { get; set; }
public string DNS1 { get; set; }
public string DNS2 { get; set; }
public static IpSettings Load() {
var ipSetting = new IpSettings();
// code to load your serialized settings
ipSettings.ip = // some value you just read
return ipSettings;
}
}