Bor*_*ard 2 .net xml-serialization
我正在构建一个返回XML的服务(没有SOAP,没有ATOM,只是简单的旧XML).假设我的域对象已经填充了数据,只需要将它们转换为XML格式.我在.NET上有什么选择?
要求:
<xaddr city="...">Line1, Postcode</xaddr>
,即完全不同的XML .以下是我认为是时刻的选项.更正/补充将非常受欢迎.
有任何评论/其他选择吗?
Xml序列化很好地工作.您使用属性来配置它.
您可以有条件地包含元素.
编辑:我已更新代码以反映您更新的问题.
[XmlRoot("pdata")] // this element name used if serialized to doc root
public class PersonalData
{
[XmlElement] // with no name here, elt name = prop name
public string Name;
[XmlElement] // with no name here, elt name = prop name
public int Age;
[XmlElement("xaddr")] // override xml element name
public AddressData Address;
[XmlElement]
public Under18Info Other {get; set;}
// serialize the above element, only if Age < 18
[XmlIgnore] // do not serialize the *Specified" property in any case
private bool OtherSpecified {
get { return Age < 18; }
}
}
public class AddressData
{
[XmlIgnore] // do not serialize (see Composite prop)
public string Line1 { get; set;}
[XmlAttribute("city")] // serialize as an attribute on the parent
public string City {get; set;}
[XmlIgnore] // do not serialize
public string Postcode {get; set;}
[XmlText] // serialize as the Text node
public string Composite
{
get { return Line1 + ", " + Postcode; }
set {
var split = value.Split(',');
Line1 = split[0];
Postcode= split[1];
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,将其实例序列化为字符串,例如:
var pdata = new PersonalData
{
Name = "Gordon Brown",
Age = 57,
Address = new AddressData
{
Line1 = "10 Downing St.",
Postcode = "1QR 3E4",
City = "London"
}
};
var ns= new System.Xml.Serialization.XmlSerializerNamespaces();
ns.Add( "", "");
var s1 = new XmlSerializer(typeof(PersonalData));
var builder = new System.Text.StringBuilder();
var xmlws = new System.Xml.XmlWriterSettings { OmitXmlDeclaration = true, Indent= true };
using ( var writer = System.Xml.XmlWriter.Create(builder, xmlws))
{
s1.Serialize(writer, pdata, ns);
}
string xml = builder.ToString();
Run Code Online (Sandbox Code Playgroud)
结果:
<pdata>
<Name>Gordon Brown</Name>
<Age>57</Age>
<xaddr city="London">10 Downing St., 1QR 3E4</xaddr>
</pdata>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2353 次 |
最近记录: |