我可以使用属性将引用的对象展平为 XML 吗?

发布于 2025-01-07 13:24:54 字数 329 浏览 4 评论 0 原文

如果我有以下内容:

public class A
{
   public B b {get;set;}
}

public class B
{
   public string Name {get;set;}
   public string Address {get;set;
}

我想要的 xml 为:

<A Name="some data" Address="address..." />

所以我试图将引用的对象展平为属性。

这可以通过 XmlSerializer 实现吗?

If I have the following:

public class A
{
   public B b {get;set;}
}

public class B
{
   public string Name {get;set;}
   public string Address {get;set;
}

what I want is the xml as:

<A Name="some data" Address="address..." />

So I am trying to flatten my referenced object as attributes.

Is this possible with an XmlSerializer?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

錯遇了你 2025-01-14 13:24:55

是的,您可以通过使用 IXmlSerialized 接口来做到这一点:

[Serializable]
public class MyClass : IXmlSerializable
{
    public MySubClass SubClass { get; set; }

    public XmlSchema GetSchema()
    {
        return null;
    }

    public void ReadXml(XmlReader reader)
    {
        throw new NotImplementedException();
    }

    public void WriteXml(XmlWriter writer)
    {
        writer.WriteStartAttribute("Name");
        writer.WriteString(SubClass.Name);
        writer.WriteEndAttribute();
        writer.WriteStartAttribute("Phone");
        writer.WriteString(SubClass.Phone);
        writer.WriteEndAttribute();
    }
}

[Serializable]
public class MySubClass
{
    public string Name { get; set; }
    public string Phone { get; set; }
}

然后像这样调用它,

        var serializer = new XmlSerializer(typeof(MyClass));
        using (var writer = new StringWriter())
        {
            var myClass = new MyClass() {SubClass = new MySubClass() {Name = "Test", Phone = "1234"}};
            serializer.Serialize(writer, myClass);
            string xml = writer.ToString();
        }

这是 xml 结果:

<?xml version="1.0" encoding="utf-16"?>
<MyClass Name="Test" Phone="1234" />

也请参阅 msdn: http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserialized.aspx

或者您可以只指定 @Morpheus 命名的属性;)

yeah, you can do this by using the IXmlSerializable interface:

[Serializable]
public class MyClass : IXmlSerializable
{
    public MySubClass SubClass { get; set; }

    public XmlSchema GetSchema()
    {
        return null;
    }

    public void ReadXml(XmlReader reader)
    {
        throw new NotImplementedException();
    }

    public void WriteXml(XmlWriter writer)
    {
        writer.WriteStartAttribute("Name");
        writer.WriteString(SubClass.Name);
        writer.WriteEndAttribute();
        writer.WriteStartAttribute("Phone");
        writer.WriteString(SubClass.Phone);
        writer.WriteEndAttribute();
    }
}

[Serializable]
public class MySubClass
{
    public string Name { get; set; }
    public string Phone { get; set; }
}

and then call it like this

        var serializer = new XmlSerializer(typeof(MyClass));
        using (var writer = new StringWriter())
        {
            var myClass = new MyClass() {SubClass = new MySubClass() {Name = "Test", Phone = "1234"}};
            serializer.Serialize(writer, myClass);
            string xml = writer.ToString();
        }

this is the xml result:

<?xml version="1.0" encoding="utf-16"?>
<MyClass Name="Test" Phone="1234" />

see msdn too: http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

or you could just specify the attributes that @Morpheus named ;)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文