为了账号安全,请及时绑定邮箱和手机立即绑定

将两种类型的 XML 反序列化为同一个类

将两种类型的 XML 反序列化为同一个类

C#
慕神8447489 2022-01-09 16:56:20
我有以下两种 XML 格式。是否有可能有一个类可以反序列化这两种类型的 XML 数据?如果是这样,我的类定义应该如何?string xmlText1 = @"<PARM KEY=""K1"" VALUE=""V1""/>";string xmlText2 = @"<PARM><KEY>K2</KEY><VALUE>V2</VALUE></PARM>";[XmlRoot(ElementName = "PARM")]public class ParmInfo{    [XmlElement("KEY")]    public string ParmKey { get; set; }    [XmlElement("VALUE")]    public string ParmVal { get; set; }    public ParmInfo()    {    }    public ParmInfo(string inpParmKey, string inpParmVal)    {        ParmKey = inpParmKey;        ParmVal = inpParmVal;    }}上面的类将与 xmlText2 一起使用。我应该如何修改它以同时处理 xmlText1 和 xmlText2?谢谢!
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

如果您想要两个 XML 的单个类,请尝试此操作


string xmlText1 = @"<PARM KEY=""K1"" VALUE=""V1""/>";

string xmlText2 = @"<PARM><KEY>K2</KEY><VALUE>V2</VALUE></PARM>";


[XmlRoot(ElementName = "PARM")]

public class ParmInfo

{

    [XmlAttribute("KEY")]

    public string ParmAttrKey { get; set; }


    [XmlAttribute("VALUE")]

    public string ParmAttrVal { get; set; }


    [XmlElement("KEY")]

    public string ParmEleKey { get; set; }


    [XmlElement("VALUE")]

    public string ParmEleVal { get; set; }


    public ParmInfo()

    {


    }


    public ParmInfo(string inpParmEleKey, string inpParmEleVal, string inpParmAttrKey, string inpParmAttrVal)

    {

        ParmEleKey = inpParmEleKey;

        ParmEleVal = inpParmEleVal;

        ParmAttrKey = inpParmAttrKey;

        ParmAttrVal = inpParmAttrVal;

    }

}

这是我用来序列化的


string xmlText1 = @"<PARM KEY=""K1"" VALUE=""V1""/>";

string xmlText2 = @"<PARM><KEY>K2</KEY><VALUE>V2</VALUE></PARM>";


XmlSerializer serializer = new XmlSerializer(typeof(ParmInfo));


StringReader stringReader = new StringReader(xmlText1);

var xmlText1Serialized = (ParmInfo)serializer.Deserialize(stringReader);


stringReader = new StringReader(xmlText2);

var xmlText2Serialized = (ParmInfo)serializer.Deserialize(stringReader);


查看完整回答
反对 回复 2022-01-09
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

这就是我最终完成的事情。我希望避免这种情况。但无论如何。


[Serializable]

[XmlRoot(ElementName = "PARM")]

public class ParmInfo

{

    private string _ParmName;

    private string _ParmVal;

    private bool _UsingAttr = false;


    [XmlElement("KEY", IsNullable = true)]

    public string ParmName

    {

        get

        {

            return _ParmName;

        }

        set

        {

            if(!string.IsNullOrEmpty(value))

            {

                _ParmName = value;

                _UsingAttr = false;

            }

        }

    }


    [XmlElement("VALUE", IsNullable = true)]

    public string ParmVal

    {

        get

        {

            return _ParmVal;

        }

        set

        {

            if (!string.IsNullOrEmpty(value))

            {

                _ParmVal = value;

            }

        }

    }


    [XmlAttribute("KEY")]

    public string ParmNameAttr

    {

        get

        {

            return _ParmName;

        }

        set

        {

            if (!string.IsNullOrEmpty(value))

            {

                _ParmName = value;

                _UsingAttr = true;

            }

        }

    }


    [XmlAttribute("VALUE")]

    public string ParmValueAttr

    {

        get

        {

            return _ParmVal;

        }

        set

        {

            if (!string.IsNullOrEmpty(value))

            {

                _ParmVal = value;

            }

        }

    }



    public ParmInfo()

    {


    }


    public ParmInfo(string inpParmName, string inpParmVal)

    {

        ParmName = inpParmName;

        _ParmVal = inpParmVal;

    }

}



查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信