1

Ticketクラスを xmlにシリアライズしたい。カスタムフィールド クラスが原因で、"XmlAttribute/XmlText を使用して複合型をエンコードできません" というエラーが表示されます。

これは、カスタムフィールドのxmlがどのように見えるかです(属性配列はnesserayですが、作成方法がわかりません):

<custom_fields type="array">
<custom_field name="Standby Reason" id="6">
<value/>
</custom_field>
<custom_field name="Close Date" id="84">

クラスチケット

public class Ticket
{
    [XmlElement("custom_fields")]
    public CustomFields Custom_fields { get; set; }

クラス CustomFields

[Serializable]
public class CustomFields
{
    [XmlAttribute("array")]
    public List<CustomField> custom_field { get; set; }

クラス CustomField

[Serializable]
public class CustomField
{
    [XmlIgnore]
    public string Name { get; set; }

    [XmlElement]
    public int Id { get; set; }

    [XmlElement]
    public string Value { get; set; }

Serialize メソッド

public string Serialize(object obj)
{
    var nsSerializer = new XmlSerializerNamespaces();
    nsSerializer.Add(String.Empty, String.Empty);

    var serializer = new XmlSerializer(typeof(Ticket), String.Empty);

    using (StringWriter writer = new StringWriter())
    {
        ExtendedXmlTextWriter xmlTextWriter = new ExtendedXmlTextWriter(writer);
        serializer.Serialize(xmlTextWriter, obj, nsSerializer);

        //return writer.ToString();

        XElement root = new XElement("custom_fields", new XAttribute("type", "array"),
            new XElement("custom_field",
                new XAttribute("name", "Standby Reason"),
                new XAttribute("id", 6)
                ), new XElement("value"),
                    new XElement("custom_field",
                        new XAttribute("name", "Close Date"),
                        new XAttribute("id", 84)
                        )
                        );

        return (writer.ToString() + root.ToString());
    }
4

3 に答える 3

5

Linq To Xml が非常に役立つ場合があります

XElement root = new XElement("ticket",
                        new XElement("custom_fields",
                            new XAttribute("type", "array"),
                            new XElement("custom_field",
                                new XAttribute("name", "Standby Reason"),
                                new XAttribute("id", 6)
                            ),
                            new XElement("value"),
                            new XElement("custom_field",
                                new XAttribute("name", "Close Date"),
                                new XAttribute("id", 84)
                            )
                        )
                );

string xml = root.ToString();

出力:

<ticket>
  <custom_fields type="array">
    <custom_field name="Standby Reason" id="6" />
    <value />
    <custom_field name="Close Date" id="84" />
  </custom_fields>
</ticket>
于 2012-11-16T17:07:18.527 に答える
1

クラスチケット

public class Ticket
{
    [XmlElement("custom_fields")]
    public CustomFields Custom_fields { get; set; }

クラス CustomFields

[Serializable]
public class CustomFields
{
    [XmlArray("array"), XmlArrayItem("custom_field")]
    public List<CustomField> custom_field { get; set; }

クラス CustomField

[Serializable]
public class CustomField
{
    [XmlAttribute("name")]
    public string Name { get; set; }

    [XmlAttribute("id")]
    public int Id { get; set; }

    [XmlElement("value")]
    public string Value { get; set; }

XML:

<ticket>
   <custom_fields>
     <array>
        <custom_field name="Standby Reason" id="6"><value /></custom_field>
        <custom_field name="Close Date" id="84"><value /></custom_field>
     </array>
   </custom_fields>
</ticket>
于 2012-11-16T16:57:18.713 に答える
0

List<CustomField> を XML 属性にすることはできません。

于 2012-11-16T16:39:04.233 に答える