Система. Uri реализует ISerializable, но дает ошибку? [дубликат]

Я не знаю ни о каком готовом Python css minifiers, но как Вы сказал, что css utils имеет опцию. После проверки и проверяя, что лицензия допускает его, Вы могли пройти исходный код и отрезать части, которые делают уменьшение себя. Тогда засуньте это в единственный сценарий и вуаля! Там Вы идете.

Как преимущество, функция csscombine в.../trunk/src/cssutils/script.py, кажется, делает работу уменьшения где-нибудь вокруг строки 361 (я проверил пересмотр 1499). Обратите внимание, что названный аргумент булевой функции "уменьшает".

10
задан Community 23 May 2017 в 12:24
поделиться

4 ответа

Для сериализации в XML класс Uri должен иметь конструктор без параметров, чего в нем нет: Uri спроектирован так, чтобы быть неизменным . Честно говоря, я не понимаю, почему нельзя сериализовать без конструктора без параметров.

Чтобы обойти это, либо измените тип свойства URI на строку или добавьте еще одно свойство с именем _URI , отметьте URI с помощью XmlIgnoreAttribute и перепишите его метод get как get {return new Ури (_URI); } .

9
ответ дан 3 December 2019 в 19:34
поделиться

Вы путаете двоичную сериализацию с сериализацией XML.

Сериализация XML - это очень простой процесс, который сохраняет значения полей и восстанавливает их в новый объект.

Двоичная сериализация - это очень много. более мощный и позволяет объекту управлять поведением сериализации. Интерфейс ISerializable , который действительно реализует Uri, используется только для двоичной сериализации.

2
ответ дан 3 December 2019 в 19:34
поделиться

Inner exceptions says:

System.Uri cannot be serialized because it does not have a parameterless constructor.

Simple answer is that you can't serialize that to xml.

0
ответ дан 3 December 2019 в 19:34
поделиться

На самом деле, лучшим решением было бы обратное - сохранение значения в свойстве Uri и доступ к нему с помощью строки.

Например:

public class Server
{
    public string Name { get; set; }

    [XmlIgnore]
    public Uri Uri { get; set; }

    [XmlElement("URI")]
    public string UriString { 
        get { return Uri.ToString(); }
        set { Uri = new Uri(value); } 
    }
}

Таким образом, невозможно установить его на недопустимый Uri (который в вашем коде вызовет исключение в средстве получения свойства). Кроме того, чтобы следовать стандартным рекомендациям по корпусу .Net, свойство должно называться Uri , а не URI .

.
9
ответ дан 3 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: