1

私はこのクラスを持っています:

[XmlRoot("SIT_ENTRY")]
public class SitEntry
{
    [XmlAttribute("STR_ENTRY_ID", DataType = "string")]
    public string EntryId { get; set; }
}

次に、これ:

[XmlRoot("SIT_ENTRY_LIST")]
public class SitEntryList : List<SitEntry>
{
}

最後に、この機能があります。

    public string SerializeToString<T>(T value)
    {
        var emptyNamepsaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
        var serializer = new XmlSerializer(value.GetType());
        var settings = new XmlWriterSettings();
        settings.Indent = false;
        settings.OmitXmlDeclaration = true;
        using (var stream = new StringWriter())
        using (var writer = XmlWriter.Create(stream, settings))
        {
            serializer.Serialize(writer, value, emptyNamepsaces);
            return stream.ToString();
        }
    } 

それでは、最初のものをシリアル化しましょう。

var sitentry = new SitEntry
{
    EntryId = "Entry1"
};
var sXml = SerializeToString(sitentry);

xml は<SIT_ENTRY STR_ENTRY_ID="Entry1" />まさに私が欲しいものです。では、2 番目のものをシリアル化しましょう。

var sitentrylist = new SitEntryList
{
    new SitEntry
    {
        EntryId = "Entry1"
    },
    new SitEntry
    {
        EntryId = "Entry2"
    }
};
sXml = SerializeToString(sitentrylist);

xmlは

<SIT_ENTRY_LIST>
    <SitEntry STR_ENTRY_ID="Entry1" />
    <SitEntry STR_ENTRY_ID="Entry2" /> 
</SIT_ENTRY_LIST>

そしてそうではない

<SIT_ENTRY_LIST>
    <SIT_ENTRY STR_ENTRY_ID="Entry1" />
    <SIT_ENTRY STR_ENTRY_ID="Entry2" /> 
</SIT_ENTRY_LIST>

私が望むように。どのようにできるのか?ありがとう!!!

4

2 に答える 2

0

私が見つけた、ここに可能な解決策があります:

[XmlRoot("SIT_ENTRY_LIST")]
public class SitEntryList
{
    [XmlElement("SIT_ENTRY", IsNullable = true)]
    public List<SitEntry> EntryList { get; set; }
}

[...]

var sitentrylist = new SitEntryList
{
    EntryList = new List<SitEntry>
    {
        new SitEntry
        {
            EntryId = "Entry1"
        },
        new SitEntry
        {
            EntryId = "Entry2"
        }
    }
};
s = SerializeToString(sitentrylist);

出力は

<SIT_ENTRY_LIST>
    <SIT_ENTRY STR_ENTRY_ID="Entry1" />
    <SIT_ENTRY STR_ENTRY_ID="Entry2" /> 
</SIT_ENTRY_LIST>

私が望むように!

于 2013-07-04T08:02:19.613 に答える
0

以前の XmlSerializer の配列に関して、私がまったく理解できなかった奇妙な動作があります。DataContractSerializer が同様のことを行うことに問題はありませんでした。

DataContractSerializer を使用できない理由はありますか? http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx

[DataContract("SIT_ENTRY")]
public class SitEntry
{
    [DataMember("STR_ENTRY_ID")]
    public string EntryId { get; set; }
}


[DataContract("SIT_ENTRY_LIST")]
public class SitEntryList : List<SitEntry>
{
}

using (MemoryStream requestObjectStream = new MemoryStream())
{   
    DataContractSerializer serializer = new DataContractSerializer(typeof(SitEntry));
    serializer.WriteObject(requestObjectStream, objectToSerialize);
}
于 2013-07-02T19:43:43.297 に答える