我正在解析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;
}
}
}
现在当我尝试导入它时,我得到了一个堆栈溢出异常...我不知道为什么会这样。任何想法如何使其工作?或建议使用什么/不使用?
答案 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适当的值。但是嘿......