我有以下xml(见下文)我想要反序列化到类Rule。我还没有找到xml属性的神奇组合,它允许我将xml内容从xml输入中的Parameters节点存储为文本。
我需要一个具有属性Name = "Rule1"
和属性Parameters =
"<User>Tommy</User><Database>local</Database>"
提前致谢。
<Rule>
<Name>Rule1</Name>
<Parameters>
<User>Tommy</User>
<Database>local</Database>
</Parameters>
</Rule>
class Rule
{
[XmlElement("Name")]
public string Name { get; set; }
[XmlElement("Parameters")]
[XmlText(typeof(string))]
public string Parameters { get; set; }
}
编辑:我认为我不够清楚。我需要将名为Parameters的整个节点序列化为字符串而不是自定义类。例如,如果处理了包含此的xml文档
<Parameters>
<X>xxxx</X>
<Y>yyyy</Y>
</Parameters>
我需要将其反序列化为字符串“&lt; X&gt; xxxx&lt; Y&gt; yyyy” 如果不同的xml文档包含此
<Parameters>
<A>aaaa</A>
<B>bbbb</B>
</Parameters>
我需要将其反序列化为字符串“&lt; A&gt; aaaa&lt; B&gt; bbbb”
答案 0 :(得分:2)
够简单吗?
XElement xDoc = XElement.Parse(xml); //or XElement.Load(...)
Rule rule = new Rule()
{
Name = (string)xDoc.Element("Name"),
Parameters = String.Join("",xDoc.Element("Parameters").Elements())
};
-
class Rule
{
public string Name { get; set; }
public string Parameters { get; set; }
}
答案 1 :(得分:0)
请考虑使用OOP方式,例如luksan
建议。
否则,我会为XmlSerializer
支持组成两个占位符类,然后将对象转换为字符串,如
class Rule
{
public string Name { get; set; }
public string Parameters { get; set; }
}
class XmlRule
{
[XmlElement("Name")]
public string Name { get; set; }
[XmlElement("Parameters")]
public Parameters Parameters { get; set; }
}
class XmlParameters
{
[XmlElement("User")]
public string User { get; set; }
[XmlElement("Database")]
public string Database { get; set; }
}
public Rule CreateRule(string xml)
{
XmlRule xmlRule = Deserialize(xml); // deserialize as you would do usually
Rule result = new Rule
{
Name = xmlRule.Name,
Parameters = CreateParametersXml(xmlRule.Parameters)
};
return result;
}
private string CreateParametersXml(XmlParameters parameters)
{
return string.Format("<User>{0}</User><Database>{1}</Database>",
parameters.User,
parameters.Database);
}
也许不是最好的解决方案,因为"<User>{0}</User><Database>{1}</Database>"
的东西是硬编码的,什么不是那么好。但是,由于我认为使用非OOP模型的整个想法会带来麻烦,这对我来说似乎是最简单的解决方案。
答案 2 :(得分:0)
试试这个方法:
public static string DeserializeToString(object obj)
{
var serializer = new XmlSerializer(obj.GetType());
var ns = new XmlSerializerNamespaces();
ns.Add("", "");
var ms = new MemoryStream();
var settings = new XmlWriterSettings { OmitXmlDeclaration = true, Encoding = new UnicodeEncoding(false, false) };
var writer = XmlWriter.Create(ms, settings);
serializer.Serialize(writer, obj, ns);
return Encoding.Unicode.GetString(ms.ToArray());
}
它将获取一个对象并将其转换为字符串,省略名称空间和XML声明。
使用像:
var rule = new Rule();
rule.Name = "name";
rule.Parameters = new Parameters();
rule.Parameters.User = "username";
rule.Parameters.Database = "database";
var stringResults = DeserializeToString(rule);