如何在序列化到xml时进行自动类型定义

本文关键字:类型 定义 序列化 xml | 更新日期: 2023-09-27 18:19:32

当我尝试将数据序列化为xml时,我使用的是这个有用的类:http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx

所以我有:

public class LocalizableString : SerializableDictionary<string, object>
    {
        public object Get(string language)
        {
            return this[language];
        }
        public void Set(string language, string value)
        {
            Util.SetDictionaryValue<string, object>(this, language, value);
        }
    }

如果我使用这个的常用代码:

public void WriteXml(System.Xml.XmlWriter writer)
        {
            XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
            XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
            foreach (TKey key in this.Keys)
            {
                writer.WriteStartElement("item");
                writer.WriteStartElement("key");
                keySerializer.Serialize(writer, key);
                writer.WriteEndElement();
                writer.WriteStartElement("value");
                TValue value = this[key];
                valueSerializer.Serialize(writer, value);
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
        }

我会得到:

<PersonenListe>
  <PersonenArray>
    <PersonObjekt>
      <PropertyType>Unknown</PropertyType>
      <ID>0</ID>
      <FriendlyName>Max Man</FriendlyName>
      <City>Capitol City</City>
      <Age>33</Age>
      <Name>
        <item>
          <key>
            <string>test1</string>
          </key>
          <value>
            <anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" p8:type="q1:string" xmlns:p8="http://www.w3.org/2001/XMLSchema-instance">test2</anyType>
          </value>
        </item>
      </Name>
    </PersonObjekt>
  </PersonenArray>
</PersonenListe>

但我需要像上面那样有自动类型定义的代码,但没有像下面例子中那样的anyType代码(只有属性类型):

<PersonenArray>
    <PersonObjekt>
      <PropertyType>Unknown</PropertyType>
      <ID>0</ID>
      <FriendlyName>Max Man</FriendlyName>
      <City>Capitol City</City>
      <Age>33</Age>
      <Name>
        <item>
          <key>
            <string>test1</string>
          </key>
          <value>
            <string>test2</string>
          </value>
        </item>
      </Name>
    </PersonObjekt>
  </PersonenArray>
</PersonenListe> 

如何在序列化到xml时进行自动类型定义

这是因为您的底层Dictionary类型为<string, object>。如果你的键和值总是字符串,那么从更改你的第一行

public class LocalizableString : SerializableDictionary<string, object>

public class LocalizableString : SerializableDictionary<string, string>

我想这应该能解决你的问题。