prevent自动关闭标签的XmlSerializer当没有数据是present [英] Prevent self closing tags in XmlSerializer when no data is present

查看:225
本文介绍了prevent自动关闭标签的XmlSerializer当没有数据是present的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我序列值:如果没有价值present的数据,然后它象下面这样的格式来了。

 <注意>
        <类型>由PPS&LT应答; /型号>
        <数据/>
  < /注>
 

但是我想在下面格式的XML数据:

 <注意>
        <类型>由PPS&LT应答; /型号>
        <数据>< /数据>
  < /注>
 

code。对于这一点,我已经写了:

  [Serializable接口]
公共类注意事项
{
    [的XmlElement(类型)
    公共字符串的typeName {获得;组; }

    [的XmlElement(数据)
    公共字符串dataValue {获得;组; }
}
 

我无法弄清楚怎么做的实现数据的以下格式,如果数据没有分配任何价值。

 <注意>
        <类型>由PPS&LT应答; /型号>
        <数据>< /数据>
  < /注>
 

解决方案

您可以通过创建自己的XmlTextWriter传递到序列化过程中做到这一点。

 公共类MyXmlTextWriter:XmlTextWriter的
{
    公共MyXmlTextWriter(流流):基地(物流,Encoding.UTF8)
    {

    }

    公众覆盖无效WriteEndElement()
    {
        base.WriteFullEndElement();
    }
}
 

您可以使用测试结果:

 类节目
{
    静态无效的主要(字串[] args)
    {
        使用(VAR流=新的MemoryStream())
        {
            无功序列化=新的XmlSerializer(typeof运算(注));
            VAR作家=新MyXmlTextWriter(流);
            serializer.Serialize(作家,新的Notes(){的typeName =已确认由PPS,dataValue =});
            VAR的结果= Encoding.UTF8.GetString(stream.ToArray());
            Console.WriteLine(结果);
        }
       Console.ReadKey();
    }
 

When I serialize the value : If there is no value present in for data then it's coming like below format.

  <Note>
        <Type>Acknowledged by PPS</Type>
        <Data />
  </Note>

But what I want xml data in below format:

  <Note>
        <Type>Acknowledged by PPS</Type>
        <Data></Data>
  </Note>

Code For this i have written :

[Serializable]
public class Notes
{
    [XmlElement("Type")]
    public string typeName { get; set; }

    [XmlElement("Data")]
    public string dataValue { get; set; }
}

I am not able to figure out what to do for achieve data in below format if data has n't assign any value.

  <Note>
        <Type>Acknowledged by PPS</Type>
        <Data></Data>
  </Note>

解决方案

You can do this by creating your own XmlTextWriter to pass into the serialization process.

public class MyXmlTextWriter : XmlTextWriter
{
    public MyXmlTextWriter(Stream stream) : base(stream, Encoding.UTF8)
    {

    }

    public override void WriteEndElement()
    {
        base.WriteFullEndElement();
    }
}

You can test the result using:

class Program
{
    static void Main(string[] args)
    {
        using (var stream = new MemoryStream())
        {
            var serializer = new XmlSerializer(typeof(Notes));
            var writer = new MyXmlTextWriter(stream);
            serializer.Serialize(writer, new Notes() { typeName = "Acknowledged by PPS", dataValue="" });
            var result = Encoding.UTF8.GetString(stream.ToArray());
            Console.WriteLine(result);
        }
       Console.ReadKey();
    }

这篇关于prevent自动关闭标签的XmlSerializer当没有数据是present的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆