Xml .net compact framework反序列化

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序列化。要让序列化系统忽略属性,

我有一个.NET4类,它用一个只读属性装饰。 我试图在.NET Compact 3.5项目中序列化该类,但出现错误: “反映类型IpSettings时出错” 据我所知.NET CF不包含任何自定义属性,但我不需要序列化此属性。有没有办法跳过属性序列化? 谢谢 亚历克斯 var serializer=new System.Xml.Serialization.XmlSerializer(typeof(IpSettings))


您可以通过.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;
    }

}