删除XML属性的一部分

本文关键字:一部分 属性 XML 删除 | 更新日期: 2023-09-27 18:12:05

我正在解析一个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;
            }
        }
    }

现在当我尝试导入它时,我得到一个堆栈溢出异常…我不知道为什么。有什么办法吗?或者推荐什么可以使用/不可以使用?

删除XML属性的一部分

您的Account getter似乎访问了您的Account属性,这会导致无限循环。试试这个:

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

查看您的Account属性:

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

的递归……因此栈溢出。鉴于你的setter,我怀疑你指的是

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

无可否认,这可能不是我要做的-我将以相当透明的方式加载/保存数据,然后显式适当地修改Account值。但是嘿…