问题与此类似:
但特别针对属性。 我有类似的东西:
<person xmlns:a="http://example.com" xmlns:b="http://sample.net">
<a:fName a:age="37">John</a:fName>
<b:lName>Wayne</b:lName>
</person>
我无法找到将前缀添加到属性“age”的方法。
如何更改上述链接中提出的解决方案以达到目标?我尝试了不同的解决方案但没有成功。
答案 0 :(得分:0)
您应该能够在链接示例中执行相同操作(但使用XmlAttributeAttribute
而不是XmlElementAttribute
)。您的财产声明类似于:
[XmlAttribute(Namespace = "http://example.com")]
public decimal Age { get; set; }
XmlAttributeAttribute
的更多详细信息和示例位于msdn site。
要获取fName
元素的属性,我认为您需要将age作为first name属性的属性。属性应该在fName
元素上还是在person
元素上?
答案 1 :(得分:0)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
namespace XMLSer
{
class Program
{
static void Main(string[] args)
{
FName fname = new FName { Age = 16.5, Text = "John" };
Person person = new Person();
person.fname = fname;
person.lname = "Wayne";
XmlSerializer ser = new XmlSerializer(typeof(Person));
ser.Serialize(Console.Out, person);
Console.ReadKey();
}
}
[XmlRoot(ElementName = "person")]
public class Person
{
[XmlElement(Namespace = "http://example.com")]
public FName fname;
[XmlElement(Namespace = "http://sample.com")]
public string lname;
[XmlNamespaceDeclarations]
public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();
public Person()
{
xmlns.Add("a", "http://example.com");
xmlns.Add("b", "http://sample.com");
}
}
public class FName
{
[XmlAttribute("age")]
public double Age;
[XmlText]
public string Text;
}
}
答案 2 :(得分:0)
我在尝试将“xsi:schemaLocation”指定为属性时遇到了同样的问题。
我修理了下一步:
[XmlElement("xsi", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Xsi { get; set; }
[XmlAttribute(AttributeName = "schemaLocation", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string SchemaLocation { get; set; }
注意:两个NameSpace都必须匹配。