# \[IGN-15393\]Unable to save Vision Designer after writing to Dataset Tag

**URL:** <https://forum.inductiveautomation.com/t/ign-15393-unable-to-save-vision-designer-after-writing-to-dataset-tag/113995>\
**Category:** Ignition\
**Tags:** vision\
**Created:** [February 16, 2026, 10:33pm UTC](https://forum.inductiveautomation.com/t/ign-15393-unable-to-save-vision-designer-after-writing-to-dataset-tag/113995 "2026-02-16T22:33:27Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![kens](https://avatars.discourse-cdn.com/v4/letter/k/0ea827/32.png) [@kens](https://forum.inductiveautomation.com/u/kens)\
**Post date:** [February 16, 2026, 10:33pm UTC](https://forum.inductiveautomation.com/t/ign-15393-unable-to-save-vision-designer-after-writing-to-dataset-tag/113995/1 "2026-02-16T22:33:27Z")

</div>

I’m attempting to store a custom list into a Vision Client Dataset tag. The following script seems to work, and I can see the data loaded into the tag:

```python
myList = ['abc','def','foo']
headers = ['bar']
rows = [[x] for x in myList] # one row per item
ds = system.dataset.toDataSet(headers, rows)
system.tag.writeBlocking('[client]myClientTag', ds)

```

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/9/0/90d683c9d41a4c4c8e30e4b504e15188e92efe31.png)

However, when attempting to save, I get an error.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/c/7/c7ebdbf8cc64c07e5419c765bcdbcf0f5dbba567.png)

If I ‘touch’ the data in the client tag manually (e.g., double click on any value and edit it manually), I can save without issue.

> **Here's the entire error message**
>
> `
> com.inductiveautomation.ignition.common.xmlserialization.SerializationException: Error during serialization for property 'children' on object '[ClientTagFolder]com.inductiveautomation.factorypmi.application.sqltags.ClientTagFolder@130b72e2'
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serializeProperties(DefaultObjectSerializationDelegate.java:153)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serialize(DefaultObjectSerializationDelegate.java:180)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializationContext.serialize(XMLSerializationContext.java:53)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializer.serialize(XMLSerializer.java:532)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializer.serializeBinary(XMLSerializer.java:513)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializer.serializeBinary(XMLSerializer.java:503)
> at com.inductiveautomation.factorypmi.designer.model.VisionDesignerImpl.serializeProjectResource(VisionDesignerImpl.java:1086)
> at com.inductiveautomation.factorypmi.designer.model.VisionDesignerImpl.syncAppToProject(VisionDesignerImpl.java:1160)
> at com.inductiveautomation.factorypmi.designer.model.VisionDesignerImpl.notifyProjectSaveStart(VisionDesignerImpl.java:651)
> at com.inductiveautomation.ignition.designer.IgnitionDesigner.lambda$getCommitTasks$46(IgnitionDesigner.java:1667)
> at com.inductiveautomation.ignition.designer.IgnitionDesigner.lambda$commitAll$41(IgnitionDesigner.java:1618)
> at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
> at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source)
> at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
> at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
> at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
> at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
> at java.base/java.util.stream.ReferencePipeline.reduce(Unknown Source)
> at com.inductiveautomation.ignition.designer.IgnitionDesigner.commitAll(IgnitionDesigner.java:1626)
> at com.inductiveautomation.ignition.designer.IgnitionDesigner.handleSave(IgnitionDesigner.java:1377)
> at com.inductiveautomation.ignition.designer.IgnitionDesigner$Handler.lambda$handleSaveAction$12(IgnitionDesigner.java:2668)
> at com.inductiveautomation.ignition.client.util.gui.progress.Task$FunctionWrapper.apply(Task.java:247)
> at com.inductiveautomation.ignition.client.util.gui.progress.Task$FunctionWrapper.apply(Task.java:237)
> at com.inductiveautomation.ignition.client.util.gui.progress.Task.lambda$runInternal$3(Task.java:205)
> at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
> at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
> at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
> at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
> at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
> at java.base/java.lang.Thread.run(Unknown Source)
> Caused by: com.inductiveautomation.ignition.common.xmlserialization.SerializationException: Unable to create clean copy of class com.inductiveautomation.ignition.common.script.builtin.PyDataset
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializer.getCleanCopy(XMLSerializer.java:598)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializationContext.getCleanCopy(XMLSerializationContext.java:75)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serializeProperties(DefaultObjectSerializationDelegate.java:143)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serialize(DefaultObjectSerializationDelegate.java:180)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializationContext.serialize(XMLSerializationContext.java:53)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.writeConstructor(DefaultObjectSerializationDelegate.java:227)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serializeConstructor(DefaultObjectSerializationDelegate.java:218)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serialize(DefaultObjectSerializationDelegate.java:176)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializationContext.serialize(XMLSerializationContext.java:53)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.writeCall(DefaultObjectSerializationDelegate.java:90)
> at com.inductiveautomation.factorypmi.designer.xmlserialization.ProjectTagDelegate.serializeProperties(ProjectTagDelegate.java:39)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serialize(DefaultObjectSerializationDelegate.java:180)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializationContext.serialize(XMLSerializationContext.java:53)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.delegates.ArrayListDelegate.serialize(ArrayListDelegate.java:23)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.delegates.ArrayListDelegate.serialize(ArrayListDelegate.java:17)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializationContext.serialize(XMLSerializationContext.java:53)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.writeCall(DefaultObjectSerializationDelegate.java:90)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.writeCall(DefaultObjectSerializationDelegate.java:77)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.doProperty(DefaultObjectSerializationDelegate.java:130)
> at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serializeProperties(DefaultObjectSerializationDelegate.java:151)
> ... 29 more
> `
> 
> `Ignition v8.3.2 (b2025120210)
> Java: Azul Systems, Inc. 17.0.16
> `

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [February 16, 2026, 10:39pm UTC](https://forum.inductiveautomation.com/t/ign-15393-unable-to-save-vision-designer-after-writing-to-dataset-tag/113995/2 "2026-02-16T22:39:19Z")

</div>

> [@kens](#):
>
> Unable to create clean copy of class com.inductiveautomation.ignition.common.script.builtin.PyDataset

I think this is a known bug. I think it's been fixed, but not sure if for 8.3.4 or 8.3.5.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [February 17, 2026, 5:02pm UTC](https://forum.inductiveautomation.com/t/ign-15393-unable-to-save-vision-designer-after-writing-to-dataset-tag/113995/3 "2026-02-17T17:02:14Z")

</div>

Known issue, not yet fixed.

> [@kens](#):
>
> `system.tag.writeBlocking('[client]myClientTag', ds)`

The problem is this line; there's complicated internal reasons why, but this will work:

`system.tag.writeBlocking('[client]myClientTag', [ds])`

---

<div class="post-metadata">

**Author:** ![kens](https://avatars.discourse-cdn.com/v4/letter/k/0ea827/32.png) [@kens](https://forum.inductiveautomation.com/u/kens)\
**Post date:** [February 19, 2026, 2:00pm UTC](https://forum.inductiveautomation.com/t/ign-15393-unable-to-save-vision-designer-after-writing-to-dataset-tag/113995/4 "2026-02-19T14:00:15Z")

</div>

Absolute magic! Thank you for the workaround 🙂

---

<div class="post-metadata">

**Author:** ![justinedwards.jle](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/justinedwards.jle/32/37854_2.png) [@justinedwards.jle](https://forum.inductiveautomation.com/u/justinedwards.jle)\
**Post date:** [July 13, 2026, 8:38am UTC](https://forum.inductiveautomation.com/t/ign-15393-unable-to-save-vision-designer-after-writing-to-dataset-tag/113995/5 "2026-07-13T08:38:05Z")

</div>

Just ran into this on `8.3.7`

```python
SerializationException: Error during serialization for property 'children' on object '[ClientTagFolder]
[...]
Unable to create clean copy of class com.inductiveautomation.ignition.common.script.builtin.PyDataset

```

My scripts are all written in this way: _...or at least I've been unable to find any that aren't_

```python
system.tag.writeBlocking(['[client]myClientTag'], [ds])

```

Do I need to remove the first set of brackets?

> [@paul-griffith](#):
>
> system.tag.writeBlocking('[client]myClientTag', [ds])

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [July 13, 2026, 12:50pm UTC](https://forum.inductiveautomation.com/t/ign-15393-unable-to-save-vision-designer-after-writing-to-dataset-tag/113995/6 "2026-07-13T12:50:54Z")

</div>

No, this is likely unrelated. Probably use of a column type that isn't whitelisted for use with tags.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [July 13, 2026, 4:03pm UTC](https://forum.inductiveautomation.com/t/ign-15393-unable-to-save-vision-designer-after-writing-to-dataset-tag/113995/7 "2026-07-13T16:03:40Z")

</div>

The 'workaround' is to add the square brackets, to ensure that you go through the "list of values" codepath instead of the "it's a single object, maybe it's a list or maybe it isn't" codepath that broke on the update to PyDatasets in 8.3. That issue is fixed in 8.3.9.

I don't know of any other way that you'd end up in this scenario to deliver a PyDataset into a client tag in-memory that we'd then try to serialize than using the write functions, though it's possible there's some edge case with bidirectional bindings, maybe?

---

<div class="post-metadata">

**Author:** ![justinedwards.jle](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/justinedwards.jle/32/37854_2.png) [@justinedwards.jle](https://forum.inductiveautomation.com/u/justinedwards.jle)\
**Post date:** [July 18, 2026, 9:02am UTC](https://forum.inductiveautomation.com/t/ign-15393-unable-to-save-vision-designer-after-writing-to-dataset-tag/113995/8 "2026-07-18T09:02:58Z")

</div>

It turned out to be the bug. I had a script in a template that was performing a dataset client tag write without the necessary brackets. I couldn't see the script because the template lived in a parent project. Moreover, it took a specific sequence of events in preview mode for the script to fire, so the serialization error that prevented saving didn't always occur.

Once the problem appeared again, I found the offending tag by systematically deleting dataset client tags and clicking the **merge button _[not the save button]_** until the error popup stopped occurring. Then, I simply restarted the designer without saving to restore the deleted tags.
