首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用内部数组反序列化xml

用内部数组反序列化xml
EN

Stack Overflow用户
提问于 2016-03-03 07:37:00
回答 1查看 113关注 0票数 1

我试图反序列化简单的xml文件:

代码语言:javascript
复制
<thesaurus xmlns="http://marklogic.com/xdmp/thesaurus">
    <metadata>
    </metadata>
    <entry>
        <term>a</term>
            <synonym>
                <term>as</term>
            </synonym>
    </entry>
    <entry>
        <term>b</term>
            <synonym>
                <term>bs</term>
            </synonym>
            <synonym>
                <term>bss</term>
            </synonym>
    </entry>
</thesaurus>

我像这样使用XmlSerializer:

代码语言:javascript
复制
var xmlSerializer = new XmlSerializer(typeof(Thesaurus));

var thesaurus = xmlSerializer.Deserialize(stream);

我的模型看起来是这样的:

代码语言:javascript
复制
[Serializable]
[XmlRoot("thesaurus", Namespace = "http://marklogic.com/xdmp/thesaurus")]
public class Thesaurus
{
    [XmlElement("metadata")]
    public Metadata Metadata { get; set; }
    [XmlElement("entry")]
    public List<Entry> Entries { get; set; }
}

public class Metadata
{

}
public class Entry
{
    [XmlElement("term")]
    public string Term { get; set; }
    [XmlElement("synonym")]
    public String[] Synonym { get; set; }
}

因此,当我运行这段代码时,我会得到反序列化的叙词表对象,其中包含解析的元数据,以及1条目中填充的termsynonym字段。我不能把所有的条目都拿到这里。

当我注释掉Synonym字段时,它开始在同义词库对象中给出2条目。我不能在<entries>标记中包装条目,因为它是我用这个xml文件输入的应用程序的某种内部格式。

有人知道如何正确解析这个xml文件吗?我试图搜索一个解决方案,但是这个xml看起来与示例中的xml非常不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-03 08:25:18

好的,如果您需要保留在synonim字段数组中的术语字段,则需要将条目类更改为如下所示:

代码语言:javascript
复制
public class Entry
{
     [XmlElement("term")]
     public string Term { get; set; }            

     [XmlElement("synonim")]
     public Term[] Synonym { get; set; }
}

此外,您还需要添加额外的一个:

代码语言:javascript
复制
public class Term
{
    [XmlElement("term")]
    public string Value { get; set; }
}

这样你就能得到你想要的。因此,额外的层次结构级别是由额外的类添加的。

请为您的测试找到以下代码:

代码语言:javascript
复制
        var xmlSerializer = new XmlSerializer(typeof(Thesaurus));

        var r = new Thesaurus();
        r.Entries = new List<Entry>();
        r.Metadata = new Metadata();

        r.Entries.Add(new Entry()
        {
            Synonym = new Term[] { new Term(){Value = "1"}, new Term() {Value = "2"},   },
            Term = "Term1"
        });

        r.Entries.Add(new Entry()
        {
            Synonym = new Term[] { new Term() { Value = "3" }, new Term() { Value = "4" }, },
            Term = "Term2"
        });

        using (TextWriter writer = new StreamWriter(@"c:\111.xml"))
        {
            xmlSerializer.Serialize(writer, r);
            writer.Close();
        }


        using (TextReader reader = new StreamReader(@"c:\111.xml"))
        {
            Thesaurus tt = xmlSerializer.Deserialize(reader) as Thesaurus;
            Console.Write(tt.Entries.Count);
            reader.Close();
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35765906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档