4

そこの。次のクラス定義があります。

[Serializable]
public enum FilterType
{
    [XmlEnum("1")]
    Text = 1,
     [XmlEnum("2")]
    Date = 2,
     [XmlEnum("3")]
    Combo = 3,
     [XmlEnum("4")]
    Multichoice = 4
}

public class FilterValues : List<string>
{
    public FilterType Type { get; set; } 
}

[Serializable]
public struct SerializableKeyValuePair<K, V>
{
    public SerializableKeyValuePair(KeyValuePair<K, V> p)
    {
        this.key = p.Key;
        this.value = p.Value;
    }

    private K key;
    public K Key
    {
        get { return key; }
        set { key = value; }
    }

    private V value;
    public V Value
    {
        get { return this.value; }
        set { this.value = value; }
    }
}

文字列型のキーとFilterValues()型の値を使用してSerializableKeyValuePairの配列をシリアル化しようとすると、xmlのTypeプロパティをシリアル化できませんSerializableKeyValuePair<string, FilterValues>[]。私はこの結果を得ました:

<?xml version="1.0" encoding="utf-16"?>  
<ArrayOfSerializableKeyValuePairOfStringFilterValues xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">    
<SerializableKeyValuePairOfStringFilterValues>      
<Key>Date</Key>     
 <Value>        <string>2012-5-16</string>      </Value>    
 </SerializableKeyValuePairOfStringFilterValues>    
 <SerializableKeyValuePairOfStringFilterValues>      
 <Key>bgName</Key>      <Value>        <string>4</string>      </Value>    
 </SerializableKeyValuePairOfStringFilterValues>  
 </ArrayOfSerializableKeyValuePairOfStringFilterValues>

助けてください、私は可能な限り何でも試しました。

4

1 に答える 1

1

これはこの質問に関連しています:クラスがList <>から継承される場合、XmlSerializerは他の属性をシリアル化しません

したがって、その質問への回答で指摘されているように、少なくとも3つの可能な方法のいずれかでFilterValuesの実装を変更する必要があります。

-IXmlSerializableを実装します
-リストから継承を削除します
-別のシリアライザーを使用する
于 2012-05-18T08:43:31.617 に答える