2012-07-26 137 views
0

我有一个.net 4类,它用ReadOnly属性装饰。我试图在.NET Compact 3.5项目中序列化这个类,但我得到一个错误: “有一个错误,反映类型IpSettings” 据我所知.NET CF不包括任何自定义属性,但我不需要序列化这个属性。有没有办法跳过属性序列化? 谢谢, 亚历 .net compact framework deserialization

 
public class IpSettings 
    { 
     [ReadOnly(true)] 
     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; } }

变种串行=新System.Xml.Serialization.XmlSerializer(typeof运算(IpSettings));

回答

0

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

} 
+0

我想序列化IP属性,但没有[ReadOnly(true)]属性。 [System.Xml.Serialization.XmlIgnore]将完全忽略序列化的IP属性。 – 2012-07-26 13:04:50

+0

对不起亚历克斯。我完全错误地解释你在问什么。我不知道为什么你需要你所要求的,因为xmlserialization不会序列化任何对象元数据,如属性。 – pdriegen 2012-07-26 13:13:39

+0

问题我相信它不是用序列化,而是用反射。 当XmlSerializer尝试反映IpSettings类时,它失败了,因为在.net CF中没有属性为[ReadOnly]。这是我的猜测。 – 2012-07-26 13:15:50

0

我发现我经常不得不重新考虑我如何处理的问题想看看我怎么会解决的东西的时候Compact Framework。

考虑下面的代码。它还可以让你的字符串值IP只读

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; 
    } 

} 

这会给你,作为程序员,灵活类,同时仍保持您的IP只读属性。