Преамбула: обратите внимание, что добавление «нового» * 1001 * не останавливает людей, называющих старую Add
простым кастом. Кроме того, с точки зрения «mex», это очень расплывчатый контракт на данные - должен ли он быть таким открытым? (много object
и т.д ...)
Во-первых: вы не пропустили несколько маркеров [DataContract]
/ [DataMember]
там? В частности:
- ResultClass.Value
- ParamData
- ParamData.Value
- ParameterClass.Data
Можете ли вы уточнить точно , какую версию .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>