删除部分XML属性

时间:2014-07-09 14:40:49

标签: c# xml string

我正在解析XML文档并通过Microsoft Lightswitch应用程序将其内容保存到一个简单的数据库中。 XML文档包含一些用户帐户,并具有以下标记:

<Data Account="i:0#.w|ab001\cn0ied32" Access="0" />
<Data Account="i:0#.w|ab001\cn0ied50" Access="0" />
<Data Account="i:0#.w|ab001\cn0ied56" Access="0" />
<Data Account="i:0#.w|ab001\cn0iit01" Access="0" />
<Data Account="i:0#.w|ab001\cn0iit05" Access="0" />

我想在域名和用户名之前保存帐户而不包含 i:0#.w | 。 所以它应该在处理后产生域名\

这是我的班级:

public class MessageInterpreter
{
   [XmlRoot("Root", IsNullable = false)]
   [Serializable]
   public class Root
   {
       [XmlElement("Data")]
       public Data[] Data{ get; set; }

       [Serializable]
       public class Data
       {
           public Data()
           {
              //Access = false;               
           }
           [XmlIgnore]
           public String Account_Nullable { get; set; }
           [XmlAttribute]
           public String Account { get { return Account.Replace("i:0#.w|", String.Empty); } set { Account_Nullable = value; } }
           [XmlIgnore]
           public bool? Access_Nullable { get; set; }
           [XmlAttribute]
           public bool Access { get { return Access_Nullable.GetValueOrDefault(); } set { Access_Nullable = value; } }

       }
    }
    private static XmlSerializer _Serializer;
    static MessageInterpreter()
    {
        _Serializer = new XmlSerializer(typeof(Root));
    }

    public MessageInterpreter()
    {
    }

    public Root ParseMessage(String message)
    {
        if (String.IsNullOrEmpty(message))
            return null;
            using (var stream = new StringReader(message))
        {
            try
            {
                return (Root)_Serializer.Deserialize(stream);
            }
            catch (Exception)
            {
                return null;
            }

        }
    }

现在当我尝试导入它时,我得到了一个堆栈溢出异常...我不知道为什么会这样。任何想法如何使其工作?或建议使用什么/不使用?

2 个答案:

答案 0 :(得分:1)

您的帐户获取器似乎访问了您的帐户属性,这会导致无限循环。 试试这个:

public String Account { get { return Account_Nullable.Replace("i:0#.w|", String.Empty); } set { Account_Nullable = value; } }

答案 1 :(得分:0)

查看您的Account媒体资源:

public String Account { get { return Account.Replace("i:0#.w|", String.Empty); }

这是递归的...因此堆栈溢出。鉴于你的二传手,我怀疑你的意思

public String Account { get { return Account_Nullable.Replace("i:0#.w|", String.Empty); }

不可否认,这可能不是我所做的 - 我以相当透明的方式加载/保存数据,然后显式修改{{1适当的值。但是嘿......