Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net C#如何将字符串数组序列化/反序列化为一系列命名元素_.net_C# 4.0_Xml Serialization_Xmlserializer - Fatal编程技术网

.net C#如何将字符串数组序列化/反序列化为一系列命名元素

.net C#如何将字符串数组序列化/反序列化为一系列命名元素,.net,c#-4.0,xml-serialization,xmlserializer,.net,C# 4.0,Xml Serialization,Xmlserializer,我提到这个问题: test@somewhere.com TFSBuildServiceHost.2013 基础知识 DEF XYZ 这就是我想要的XML的样子。如何更改下面的代码以这种方式构建它 <Subscription> <TextContains>ABC</TextContains> <TextContains>DEF</TextContains>

我提到这个问题:


test@somewhere.com
TFSBuildServiceHost.2013
基础知识
DEF
XYZ
这就是我想要的XML的样子。如何更改下面的代码以这种方式构建它

        <Subscription>
            <TextContains>ABC</TextContains>
            <TextContains>DEF</TextContains>
            <TextContains>XYZ</TextContains>
        </Subscription>

基础知识
DEF
XYZ
这是我要序列化的类定义:

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

namespace EventLog_Reporter
{
    public class Subscription
    {
        public string Source;
        public List<string> TextContains;
        public List<string> UCTextContains;
        public List<string> TextExcludes;
        public List<string> UCTextExcludes;
    }

    public class Subscriber
    {
        public string Group;
        public string Email;
        public List<Subscription> SubscriptionList; 
    }

    public class Subscribers 
    {
        public List<Subscriber> SubscriberList;
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Serialization;
命名空间事件日志报告器
{
公开课订阅
{
公共字符串源;
公共列表文本包含;
公共列表包含:;
公开名单;
公开名单;
}
公共类订户
{
公共字符串组;
公共字符串电子邮件;
公共列表订阅列表;
}
公共类订户
{
公开名单订户;
}
}
这是我将序列化对象写入XML文件的代码:

    public static void testSerialization()
    {
        Subscribers subscribers = new Subscribers();
        Subscription subscription1 = new Subscription();
        Subscription subscription2 = new Subscription();
        Subscriber subscriber1 = new Subscriber();

        subscription2.TextContains = new List<string>(); 
        subscription2.TextContains.Add("ABC"); 
        subscription2.TextContains.Add("DEF"); 
        subscription2.TextContains.Add("XYZ"); 

        subscription1.Source = "TFSBuildServiceHost.2013";

        subscriber1.Email = "test@somewhere.com";
        subscriber1.SubscriptionList = new List<Subscription>(); 
        subscriber1.SubscriptionList.Add(subscription1);
        subscriber1.SubscriptionList.Add(subscription2);

        subscribers.SubscriberList = new List<Subscriber>();
        subscribers.SubscriberList.Add(subscriber1);

        string strOutFilenameXMLSerializer = "xmlSerializerObjectTest1.xml"; 
        StreamWriter sw = new StreamWriter(strOutFilenameXMLSerializer);
        XmlSerializer xmlSerializer = new XmlSerializer(subscribers.GetType());
        xmlSerializer.Serialize(sw, subscribers);
        sw.Close(); 

    }
publicstaticvoidtestserialization()
{
订阅者订阅者=新订阅者();
订阅订阅1=新订阅();
订阅订阅2=新订阅();
订户subscriber1=新订户();
subscription2.TextContains=新列表();
subscription2.TextContains.Add(“ABC”);
subscription2.TextContains.Add(“DEF”);
subscription2.TextContains.Add(“XYZ”);
subscription1.Source=“TFSBuildServiceHost.2013”;
subscriber1.Email=”test@somewhere.com";
subscriber1.SubscriptionList=新列表();
subscriber1.SubscriptionList.Add(subscription1);
subscriber1.SubscriptionList.Add(subscription2);
subscribers.SubscriberList=新列表();
SubscriberList.Add(subscriber1);
字符串strOutFilenameXMLSerializer=“xmlSerializerObjectTest1.xml”;
StreamWriter sw=新的StreamWriter(strOutFilenameXMLSerializer);
XmlSerializer XmlSerializer=新的XmlSerializer(subscribers.GetType());
serializer.Serialize(软件、订阅者);
sw.Close();
}
谢谢。

您可以使用该属性指定您的
列表
应在不使用外部包装器元素的情况下序列化:

public class Subscription
{
    public string Source;
    [XmlElement]
    public List<string> TextContains;
    [XmlElement]
    public List<string> UCTextContains;
    [XmlElement]
    public List<string> TextExcludes;
    [XmlElement]
    public List<string> UCTextExcludes;
}

谢谢,我想我试过了,但也许我一下子做了太多的改变。
public class Subscription
{
    public string Source;
    [XmlElement]
    public List<string> TextContains;
    [XmlElement]
    public List<string> UCTextContains;
    [XmlElement]
    public List<string> TextExcludes;
    [XmlElement]
    public List<string> UCTextExcludes;
}
    [XmlElement("Contains")]
    public List<string> TextContains;