C# 序列化具有object类型属性的类

C# 序列化具有object类型属性的类,c#,xml-serialization,C#,Xml Serialization,类型对象的属性值可以是int、string、decimal等任何类型的单个值,也可以是List、List等值的集合 public class Criteria { [XmlElement("IDS")] public object Value { get; set; } } 电流输出: <CriteriaGroup> <Criteria p2:type="Criteria" xmlns

类型对象的属性值可以是int、string、decimal等任何类型的单个值,也可以是List、List等值的集合

public class Criteria
{
    [XmlElement("IDS")]
    public object Value
    {
        get; set;
    }
}
电流输出:

<CriteriaGroup>
  <Criteria p2:type="Criteria" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance">
    <IDS p2:type="ArrayOfInt">
      <int>2610</int>
      <int>2452</int>
    </IDS>
  </Criteria>
  <Criteria p2:type="Criteria" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance">
    <IDS p2:type="ArrayOfString">
      <string>CUMULU1MO</string>
      <string>ALLIEDWX2</string>      
    </IDS>
  </Criteria>
</CriteriaGroup>

2610
2452
积云
ALLIEDWX2
预期产出:

我怎样才能达到以下效果?尝试使用XmlArray、XmlArrayItem装饰公共对象值,但没有成功

<CriteriaGroup>
  <Criteria>
    <IDS>
      <ID>2610</ID>
      <ID>2452</ID>
    </IDS>
  </Criteria>
  <Criteria>
    <IDS>
      <ID>CUMULU1MO</ID>
      <ID>ALLIEDWX2</ID>      
    </IDS>
  </Criteria>
</CriteriaGroup>

2610
2452
积云
ALLIEDWX2
使用下面的方法进行序列化

public static string Serialize<T>(T data)
{
    string xmlData = string.Empty;
    XmlSerializer ser = new XmlSerializer(typeof(T));
    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
    ns.Add("", "");
    
    var settings = new XmlWriterSettings();
    settings.Indent = true;
    settings.OmitXmlDeclaration = true;
    
    using (StringWriter sw = new StringWriter())
    {
        using (XmlWriter xw = XmlWriter.Create(sw, settings))
        {
            ser.Serialize(xw, data, ns);
            xmlData = sw.ToString();
        }
    
    }
    return xmlData;
}
公共静态字符串序列化(T数据)
{
string xmlData=string.Empty;
XmlSerializer ser=新的XmlSerializer(typeof(T));
XmlSerializerNamespaces ns=新的XmlSerializerNamespaces();
加上(“,”);
var设置=新的XmlWriterSettings();
settings.Indent=true;
settings.OmitXmlDeclaration=true;
使用(StringWriter sw=new StringWriter())
{
使用(XmlWriter xw=XmlWriter.Create(sw,设置))
{
序列序列化(xw,数据,ns);
xmlData=sw.ToString();
}
}
返回XML数据;
}
尝试以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            CriteriaGroup CriteriaGroup = new CriteriaGroup()
            {
                Criteria = new List<Criteria>() {
                    new Criteria() { Value = new string[] { "2610","2452"}
                    },
                    new Criteria() { Value = new string[] {"CUMULU1MO", "ALLIEDWX2"}
                    }
                }
            };
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            XmlWriter writer = XmlWriter.Create(FILENAME, settings);
            XmlSerializer serializer = new XmlSerializer(typeof(CriteriaGroup));
            serializer.Serialize(writer, CriteriaGroup);
        }
    }
    public class CriteriaGroup
    {
        [XmlElement()]
        public List<Criteria> Criteria { get; set; }
    }
    public class Criteria
    {
        [XmlArray("IDS")]
        [XmlArrayItem("ID")]
        public string[] Value
        {
            get;
            set;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Serialization;
命名空间控制台应用程序1
{
班级计划
{
常量字符串文件名=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
CriteriaGroup CriteriaGroup=新的CriteriaGroup()
{
标准=新列表(){
新条件(){Value=新字符串[]{“2610”,“2452”}
},
新标准(){Value=newstring[]{“CUMULU1MO”,“ALLIEDWX2”}
}
}
};
XmlWriterSettings=新的XmlWriterSettings();
settings.Indent=true;
XmlWriter=XmlWriter.Create(文件名、设置);
XmlSerializer serializer=新的XmlSerializer(typeof(CriteriaGroup));
serializer.Serialize(编写器、标准组);
}
}
公共类标准组
{
[XmlElement()]
公共列表条件{get;set;}
}
公共类标准
{
[XmlArray(“IDS”)]
[XmlArrayItem(“ID”)]
公共字符串[]值
{
得到;
设置
}
}
}

谢谢,在做了建议的更改后,我得到的是CUMULU1MOALLIEDWX2而不是CUMULU1MOALLIEDWX2。请给我其他建议?我更新了代码。非常感谢@jdweng。非常感谢。