VSTO Visio надстройка SolutionXmlElement ошибка - PullRequest
0 голосов
/ 22 марта 2020

Я разрабатываю надстройку VSTO для Visio, и мне нужно сохранить свойства документа с помощью свойства Document.SolutionXmlElement. Следующий код демонстрирует обработчик для сериализации XML для объекта перед сохранением. Основываясь на чтении, я обертываю экземпляр класса C# в оболочку Solution Xml с атрибутом Name, установленным на имя элемента исключенного сериализованного экземпляра класса:

        private void Document_Saved(Visio.Document document)
        {
        IDictionary<string, ModelGenMVCModel> documentModel = GetRibbon().documentModel;
        if (documentModel.TryGetValue(document.Name, out ModelGenMVCModel modelGenMVCModel))
        {
            try
            {
                string serializedModel = new SolutionXml(modelGenMVCModel,ModelGenVisioAddIn.Properties.Resources.SolutionXmlElementName).Serialize();
                LOGGER.Debug(String.Format("Saving model gen properties:\n{0}", serializedModel));
                document.SolutionXMLElement[ModelGenVisioAddIn.Properties.Resources.SolutionXmlElementName] = serializedModel;
            } catch ( Exception e)
            {
                LOGGER.Error(String.Format("Serialization error {0}\n{1}", e.Message, e.StackTrace));
            }
        }
    }

Сериализованный XML является следующим образом:

<?xml version="1.0" encoding="utf-16"?>
<SolutionXml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="ModelGenMVCModel">
    <ModelGenMVCModel>
        <Author>Andrew Tyson</Author>
        <UniqueID>Object_ID</UniqueID>
        <Name>Name</Name>
        <Description>Note</Description>
        <LineColor/>
        <FillColor/>
        <SearchMatchLineColor/>
        <SearchMatchFillColor/>
        <SearchMatchFontColor/>
        <SearchNoMatchLineColor/>
        <SearchNoMatchFillColor/>
        <LineWidth>1.5</LineWidth>
        <PopupHeight>250</PopupHeight>
        <PopupWidth>750</PopupWidth>
        <InitialZoom>2</InitialZoom>
        <MinZoom>0.05</MinZoom>
        <MaxZoom>2</MaxZoom>
        <ZoomSteps>0.05</ZoomSteps>
        <EnablePan>true</EnablePan>
        <EnableSearch>true</EnableSearch>
        <DragPan>true</DragPan>
        <MouseWheelZoom>true</MouseWheelZoom>
        <DoubleClickZoom>true</DoubleClickZoom>
        <PanDuration>300</PanDuration>
        <PanAmount>100</PanAmount>
        <OpenInBrowser>true</OpenInBrowser>
        <SaveToLocation/>
    </ModelGenMVCModel>
</SolutionXml>

Однако я получаю исключение "Недопустимый параметр". Любая помощь будет принята с благодарностью.

Спасибо и С уважением Андрей

1 Ответ

1 голос
/ 22 марта 2020

У меня есть пример кода, демонстрирующий управление SolutionXmlElement. Вы можете проверить это, если это работает для вас. Он определяет простой класс для сохранения / загрузки настроек:

https://unmanagedvisio.com/using-solutionxml-with-c/

Полагаю, проблема может заключаться в том, что вам действительно нужно поместить туда XML, а не сериализованная строка. Но, не глядя на полный пример, трудно сказать.

...