Позвонить chart.reflow()
мне помогло. Документы: http://api.highcharts.com/highcharts#Chart.reflow
Лучше всего отказаться от использования слабых типов, таких как NameValueCollection
и ArrayList
. Вместо этого используйте Dictionary
и List
.
NameValueCollection
, похоже, не совсем подходит для этого варианта использования. Существует серия сообщений в этом блоге , которые посвящены этой проблеме и представляют возможное решение (а именно: ] используйте IDictionary ). Но я не тестировал.
Другой подход может заключаться в использовании класса-оболочки для адаптации NameValueCollection
к сериализации WCF. Вот простой пример, который сериализует каждую пару «имя-значение» как одну строку с разделителями-запятыми. Затем он считывает это значение обратно в NameValueCollection
после десериализации:
[CollectionDataContract]
public class NameValueCollectionWrapper : IEnumerable
{
public NameValueCollectionWrapper() : this(new NameValueCollection()) { }
public NameValueCollectionWrapper(NameValueCollection nvc)
{
InnerCollection = nvc;
}
public NameValueCollection InnerCollection { get; private set; }
public void Add(object value)
{
var nvString = value as string;
if (nvString != null)
{
var nv = nvString.Split(',');
InnerCollection.Add(nv[0], nv[1]);
}
}
public IEnumerator GetEnumerator()
{
foreach (string key in InnerCollection)
{
yield return string.Format("{0},{1}", key, InnerCollection[key]);
}
}
}
Это позволит вам использовать тип как стандартное свойство [DataMember]
в вашем DataContract
] s, и вы также можете использовать стандартные методы сериализации WCF.
NameValueCollection не реализует напрямую интерфейс ICollection. Вместо этого NameValueCollection расширяет NameObjectCollectionBase. Это реализует интерфейс ICollection и перегруженный файл Add (system. string) не реализован в классе NameValueCollection. Когда вы используете XMLSerializer, XmlSerializer пытается сериализовать или десериализовать NameValueCollection как универсальную ICollection. Поэтому он ищет значение по умолчанию Add (System.String). При отсутствии метода Add (system.String) создается исключение.
Используйте класс SoapFormatter для сериализации вместо использования XML-сериализации. Чтобы использовать класс SoapFormatter, вы должны добавить ссылку на System.Runtime.Serialization.Formatters.Soap.dll.
// Serializing NameValueCollection object by using SoapFormatter
SoapFormatter sf = new SoapFormatter();
Stream strm1 = File.Open(@"C:\datasoap.xml", FileMode.OpenOrCreate,FileAccess.ReadWrite);
sf.Serialize(strm1,namValColl);
strm1.Close();
// Deserializing the XML file into NameValueCollection object
// by using SoapFormatter
SoapFormatter sf1 = new SoapFormatter();
Stream strm2 = File.Open(@"C:\datasoap.xml", FileMode.Open,FileAccess.Read);
NameValueCollection namValColl1 = (NameValueCollection)sf1.Deserialize(strm2);
strm2.Close();