Как объяснено в той же документации, если вы включите опцию --cached
, она удалит только из индекса, а если вы не включите, удалит оба.
CollectionDataContract
припишите как jezell предложенныйИсточник: совместное использование типа набора WCF
Добавьте CollectionDataContract к классу Словаря:
Для получения дополнительной информации об использовании контрактов данных набора для реализации словарей проверьте эту ссылку:
Преамбула: отметьте то добавление "нового" Add
не останавливает людей, называющих старое Add
просто путем кастинга. Кроме того, с точки зрения "mex", который является очень неопределенным контрактом данных - это должно быть таким образом открыто? (много из object
и т.д....)
Во-первых: не имейте Вас, скучал по некоторым [DataContract]
/[DataMember]
маркеры там? В особенности:
Можно ли разъясниться точно, какую версию.NET Вы используете? DataContractSerializer
и т.д. были настроены через пакеты обновления. С 3,5 установленными SP1 (единственная вещь я должен вручить) она действительно, по крайней мере, сериализирует и десериализовывает через DataContractSerializer
(никакой стек WCF), и корректное Add
метод называют.
Можно ли проверить ли следующие работы с локальной версией? (это работает на меня с 3,5 SP1, и с недостающими атрибутами) [производит сначала]:
1
MyDictionary
abc=123
def=ghi
Код:
// or long-hand in C# 2.0
ParameterClass pc = new ParameterClass {
Data = new List<ParmData> { new ParmData {
Value = new MyDictionary {
{"abc",123},
{"def","ghi"}
}}}};
DataContractSerializer dcs = new DataContractSerializer(pc.GetType());
string xml;
using(StringWriter sw = new StringWriter())
using(XmlWriter xw = XmlWriter.Create(sw)) {
dcs.WriteObject(xw, pc);
xw.Close();
xml = sw.ToString();
}
using(StringReader sr = new StringReader(xml)) {
ParameterClass clone = (ParameterClass)dcs.ReadObject(XmlReader.Create(sr));
Console.WriteLine(clone.Data.Count);
Console.WriteLine(clone.Data[0].Value.GetType().Name);
MyDictionary d = (MyDictionary)clone.Data[0].Value;
foreach (KeyValuePair<string, object> pair in d)
{
Console.WriteLine("{0}={1}", pair.Key, pair.Value);
}
}
Очевидно, это просто тестирует DataContractSerializer
(без всего стека WCF), но это, кажется, работает... так: то же кодирует работу с Вашей локальной версией.NET? В противном случае действительно ли установка является последними 3,0 пакетами обновления опция? (идеально через установку 3,5 SP1).
Для получения информации я получаю xml:
<?xml version="1.0" encoding="utf-16"?><ParameterClass xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/"><Data><ParmData><Value xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" i:type="d4p1:ArrayOfKeyValueOfstringanyType"><d4p1:KeyValueOfstringanyType><d4p1:Key>abc</d4p1:Key><d4p1:Value xmlns:d6p1="http://www.w3.org/2001/XMLSchema" i:type="d6p1:int">123</d4p1:Value></d4p1:KeyValueOfstringanyType><d4p1:KeyValueOfstringanyType><d4p1:Key>def</d4p1:Key><d4p1:Value xmlns:d6p1="http://www.w3.org/2001/XMLSchema" i:type="d6p1:string">ghi</d4p1:Value></d4p1:KeyValueOfstringanyType></Value></ParmData></Data></ParameterClass>
Я наконец нашел способ сделать это. Я нашел эту ссылку, которая указала в правильном направлении, но я попытаюсь подвести итог.
[CollectionDataContract]
к Вашему пользовательскому набору<CollectionMappings/>
Замените его следующим xml.
<CollectionMappings>
<CollectionMapping TypeName = "Полный. Пространство имен. Здесь" Категория = "Список"/>
</CollectionMappings>