Альтернативой найденному вами решению является создание файла nuget.config
, удаляющего все источники nuget:
<configuration>
<packageSources>
<clear />
</packageSources>
</configuration>
Таким образом, для восстановления не нужно использовать специальные аргументы командной строки или построить.
Эта статья имеет метод для сериализации IDictionaries. Ищите "я заметил, что XmlSerializer не сериализирует объекты та реализация IDictionary по умолчанию. Есть ли какой-либо путь вокруг этого?" о 2/3 путь ниже на страницу.
Создайте тип MyKeyValuePair<K,V>
, и возвратите a List<MyKeyValuePair<int,string>>
, скопированный со словаря.
Я использую этот util класс для сериализации словарей, возможно, это может быть полезно для Вас
using System.Collections.Generic;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace Utils {
///<summary>
///</summary>
public class SerializableDictionary : IXmlSerializable {
private readonly IDictionary<int, string> dic;
public DiccionarioSerializable() {
dic = new Dictionary<int, string>();
}
public SerializableDictionary(IDictionary<int, string> dic) {
this.dic = dic;
}
public IDictionary<int, string> Dictionary {
get { return dic; }
}
public XmlSchema GetSchema() {
return null;
}
public void WriteXml(XmlWriter w) {
w.WriteStartElement("dictionary");
foreach (int key in dic.Keys) {
string val = dic[key];
w.WriteStartElement("item");
w.WriteElementString("key", key.ToString());
w.WriteElementString("value", val);
w.WriteEndElement();
}
w.WriteEndElement();
}
public void ReadXml(XmlReader r) {
if (r.Name != "dictionary") r.Read(); // move past container
r.ReadStartElement("dictionary");
while (r.NodeType != XmlNodeType.EndElement) {
r.ReadStartElement("item");
string key = r.ReadElementString("key");
string value = r.ReadElementString("value");
r.ReadEndElement();
r.MoveToContent();
dic.Add(Convert.ToInt32(key), value);
}
}
}
}
Не существует "стандартного" способа взять Словарь и преобразовать его в XML. Вы должны выбрать способ, и клиенты вашего веб-сервиса должны будут знать об этом точно так же, когда они будут использовать ваш сервис. Если и клиент, и сервер являются .NET, то вы можете просто использовать один и тот же код для сериализации и десериализации словарей в XML на обоих концах.
В этом сообщении блога есть код для этого . Этот код использует сериализацию по умолчанию для ключей и значений словаря, что полезно, когда у вас есть нестроковые типы для любого из них. Код использует наследование для выполнения своих задач (вы должны использовать этот подкласс для хранения своих значений). Вы также можете использовать подход типа оболочки, как это было сделано в последнем пункте этой статьи , но обратите внимание, что код в этой статье просто использует ToString, так что вы должны объединить его с первой статьей.
Поскольку я согласен с Джоэлом в том, что StackOverflow является каноническим источником для всего, ниже приводится копия кода из первой ссылки. Если вы заметили какие-либо ошибки, отредактируйте этот ответ!
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
[XmlRoot("dictionary")]
public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
{
#region IXmlSerializable Members
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(System.Xml.XmlReader reader)
{
XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
bool wasEmpty = reader.IsEmptyElement;
reader.Read();
if (wasEmpty)
return;
while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
{
reader.ReadStartElement("item");
reader.ReadStartElement("key");
TKey key = (TKey)keySerializer.Deserialize(reader);
reader.ReadEndElement();
reader.ReadStartElement("value");
TValue value = (TValue)valueSerializer.Deserialize(reader);
reader.ReadEndElement();
this.Add(key, value);
reader.ReadEndElement();
reader.MoveToContent();
}
reader.ReadEndElement();
}
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();
}
}
#endregion
}