473,405 Members | 2,272 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,405 software developers and data experts.

XmlSerializer and shared objects (or How to generate IDREFs using XmlSerializer)

I am trying to find a solution that will allow me to use XmlSerializer to serialize/deserialize a collection of objects where a given object is shared between two or more other objects, and not create duplicate XML representations of the shared object, but instead use IDREFs to refer to the shared object.

The XML I'm trying to produce is as follows (where "href" is an IDREF):
<?xml version="1.0" encoding="utf-8"?>
<MyRootClass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BusinessEvent Id="1" DisplayName="A Test Event" />
<Conditions>
<EventCondition Id="2" DisplayName="Condition 1">
<TheEvent href="1"/>
</EventCondition>
<EventCondition Id="3" DisplayName="Condition 2">
<TheEvent href="1"/>
</EventCondition>
</Conditions>
</MyRootClass>
However, the XML produced by XmlSerializer is the following:
<?xml version="1.0" encoding="utf-8"?>
<MyRootClass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BusinessEvent Id="1" DisplayName="A Test Event" />
<Conditions>
<EventCondition Id="2" DisplayName="Condition 1">
<TheEvent Id="1" DisplayName="A Test Event" />
</EventCondition>
<EventCondition Id="3" DisplayName="Condition 2">
<TheEvent Id="1" DisplayName="A Test Event" />
</EventCondition>
</Conditions>
</MyRootClass>
The code used to produce the (incorrect) XML is as follows:
using System;
using System.Collections;
using System.IO;
using System.Xml.Serialization;
using System.Xml;

public class TestC {
public static void Main() {
TestC test = new TestC();
test.SerializeDocument("sharedEvent.xml");
}

public void SerializeDocument(string filename) {
XmlSerializer s = new XmlSerializer(typeof(MyRootClass));

using (TextWriter writer= new StreamWriter(filename)) {
MyRootClass myRootClass = new MyRootClass();

BusinessEvent evt = new BusinessEvent("1", "A Test Event");
myRootClass.TheSharedEvent = evt;

EventCondition ec1 = new EventCondition("2", "Condition 1");
ec1.TheEvent = evt;
myRootClass.Conditions.Add(ec1);

EventCondition ec2 = new EventCondition("3", "Condition 2");
ec2.TheEvent = evt;
myRootClass.Conditions.Add(ec2);

s.Serialize(writer, myRootClass);
}
}
}

// This is the root class that will be serialized.
public class MyRootClass {
[XmlElement("BusinessEvent")]
public BusinessEvent TheSharedEvent;

[XmlArrayItem(IsNullable=true, Type = typeof(EventCondition))]
[XmlArray]
public IList Conditions = new ArrayList();
}

// A single instance of BusinessEvent will be shared by two EventCondition instances
public class BusinessEvent {
[XmlAttribute(DataType="ID")]
public string Id;

[XmlAttribute]
public string DisplayName;

public BusinessEvent() {}
public BusinessEvent(string Id, string DisplayName) {
this.Id = Id;
this.DisplayName = DisplayName;
}
}

// Two EventCondition instances will refer to the same (single) BusinessEvent instance
public class EventCondition {
[XmlAttribute(DataType="ID")]
public string Id;

[XmlAttribute]
public string DisplayName;

//[XmlAttribute(DataType="IDREF")]
public BusinessEvent TheEvent;

public EventCondition() {}
public EventCondition(string Id, string DisplayName) {
this.Id = Id;
this.DisplayName = DisplayName;
}
}

Any ideas or pointers on how to achieve the IDREF bit will be greatly appreciated.
Nov 11 '05 #1
5 5399
Hi Christoph,

Thanks for the info. Unfortunately, I can't get the code you suggested to work. I get an InvalidOperationException that states:

Unhandled Exception: System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: Token StartElement in state Epilog would result in an invalid XML document.

So I guess I need to implement a full XML persistence framework myself.... :-(

I would have liked to have been able to extend XmlSerializer and XmlSerializationWriter, however there is no documentation for these things... MSDN simply states "This type supports the .NET Framework infrastructure and is not intended to be used directly from your code." Alas.

<MildRant>
One wonders why Microsoft has made so many of the .NET Framework classes sealed, or declared so many methods as non-virtual, preventing extension and adaptation...? Now I need to create duplicate much of the reflection work that XmlSerializer performs so that my XmlSerializer can use the same Xml attributes, etc. but correctly handle serialization of object graphs.
</MildRant>
Anyways, once again, thanks for the tip.Stuart."Christoph Schittko [MVP]" <ch********************@austin.rr.com> wrote in message news:eJ**************@TK2MSFTNGP11.phx.gbl...
Stuart,

You can get the XmlSerializer to produce a format that's based on section 5 of the SOAP 1.1 spec [0]. However, that format serializes ALL objects in an object graph as top level objects and links them up via ID/IDREF combinations.

To force that format you have to initialize the XmlSerializer with TypeMappings from the SoapReflectionImporter as shown in the snippet below:

XmlTextWriter xw = new XmlTextWriter( "bla.xml", null );
XmlSerializer ser = new XmlSerializer(xmlType);
XmlTypeMapping xmlType =
(new SoapReflectionImporter()).ImportTypeMapping(obj.Ge tType());
ser.Serialize(xw, obj);

If that's not good enough for you then you pretty much have to implement serialization by hand.

--
HTH
Christoph Schittko [MVP]
Software Architect, .NET Mentor

"Stuart Robertson" <sr*****@absolutesys.com> wrote in message news:OX**************@tk2msftngp13.phx.gbl...
I am trying to find a solution that will allow me to use XmlSerializer to serialize/deserialize a collection of objects where a given object is shared between two or more other objects, and not create duplicate XML representations of the shared object, but instead use IDREFs to refer to the shared object.

The XML I'm trying to produce is as follows (where "href" is an IDREF):
<?xml version="1.0" encoding="utf-8"?>
<MyRootClass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BusinessEvent Id="1" DisplayName="A Test Event" />
<Conditions>
<EventCondition Id="2" DisplayName="Condition 1">
<TheEvent href="1"/>
</EventCondition>
<EventCondition Id="3" DisplayName="Condition 2">
<TheEvent href="1"/>
</EventCondition>
</Conditions>
</MyRootClass>
However, the XML produced by XmlSerializer is the following:
<?xml version="1.0" encoding="utf-8"?>
<MyRootClass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BusinessEvent Id="1" DisplayName="A Test Event" />
<Conditions>
<EventCondition Id="2" DisplayName="Condition 1">
<TheEvent Id="1" DisplayName="A Test Event" />
</EventCondition>
<EventCondition Id="3" DisplayName="Condition 2">
<TheEvent Id="1" DisplayName="A Test Event" />
</EventCondition>
</Conditions>
</MyRootClass>
The code used to produce the (incorrect) XML is as follows:
using System;
using System.Collections;
using System.IO;
using System.Xml.Serialization;
using System.Xml;

public class TestC {
public static void Main() {
TestC test = new TestC();
test.SerializeDocument("sharedEvent.xml");
}

public void SerializeDocument(string filename) {
XmlSerializer s = new XmlSerializer(typeof(MyRootClass));

using (TextWriter writer= new StreamWriter(filename)) {
MyRootClass myRootClass = new MyRootClass();

BusinessEvent evt = new BusinessEvent("1", "A Test Event");
myRootClass.TheSharedEvent = evt;

EventCondition ec1 = new EventCondition("2", "Condition 1");
ec1.TheEvent = evt;
myRootClass.Conditions.Add(ec1);

EventCondition ec2 = new EventCondition("3", "Condition 2");
ec2.TheEvent = evt;
myRootClass.Conditions.Add(ec2);

s.Serialize(writer, myRootClass);
}
}
}

// This is the root class that will be serialized.
public class MyRootClass {
[XmlElement("BusinessEvent")]
public BusinessEvent TheSharedEvent;

[XmlArrayItem(IsNullable=true, Type = typeof(EventCondition))]
[XmlArray]
public IList Conditions = new ArrayList();
}

// A single instance of BusinessEvent will be shared by two EventCondition instances
public class BusinessEvent {
[XmlAttribute(DataType="ID")]
public string Id;

[XmlAttribute]
public string DisplayName;

public BusinessEvent() {}
public BusinessEvent(string Id, string DisplayName) {
this.Id = Id;
this.DisplayName = DisplayName;
}
}

// Two EventCondition instances will refer to the same (single) BusinessEvent instance
public class EventCondition {
[XmlAttribute(DataType="ID")]
public string Id;

[XmlAttribute]
public string DisplayName;

//[XmlAttribute(DataType="IDREF")]
public BusinessEvent TheEvent;

public EventCondition() {}
public EventCondition(string Id, string DisplayName) {
this.Id = Id;
this.DisplayName = DisplayName;
}
}

Any ideas or pointers on how to achieve the IDREF bit will be greatly appreciated.
Nov 11 '05 #2
that doesn't sound like an error that's happening just because of the SOAP style format. Any chance your output would not result in well-formed XML? Are you writing into a fresh, new, clean XmlTextWriter ?

--
HTH
Christoph Schittko [MVP]
Software Architect, .NET Mentor
"Stuart Robertson" <sr*****@absolutesys.com> wrote in message news:O9**************@TK2MSFTNGP12.phx.gbl...
Hi Christoph,

Thanks for the info. Unfortunately, I can't get the code you suggested to work. I get an InvalidOperationException that states:

Unhandled Exception: System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: Token StartElement in state Epilog would result in an invalid XML document.

So I guess I need to implement a full XML persistence framework myself.... :-(

I would have liked to have been able to extend XmlSerializer and XmlSerializationWriter, however there is no documentation for these things... MSDN simply states "This type supports the .NET Framework infrastructure and is not intended to be used directly from your code." Alas.

<MildRant>
One wonders why Microsoft has made so many of the .NET Framework classes sealed, or declared so many methods as non-virtual, preventing extension and adaptation...? Now I need to create duplicate much of the reflection work that XmlSerializer performs so that my XmlSerializer can use the same Xml attributes, etc. but correctly handle serialization of object graphs.
</MildRant>
Anyways, once again, thanks for the tip.Stuart."Christoph Schittko [MVP]" <ch********************@austin.rr.com> wrote in message news:eJ**************@TK2MSFTNGP11.phx.gbl...
Stuart,

You can get the XmlSerializer to produce a format that's based on section 5 of the SOAP 1.1 spec [0]. However, that format serializes ALL objects in an object graph as top level objects and links them up via ID/IDREF combinations.

To force that format you have to initialize the XmlSerializer with TypeMappings from the SoapReflectionImporter as shown in the snippet below:

XmlTextWriter xw = new XmlTextWriter( "bla.xml", null );
XmlSerializer ser = new XmlSerializer(xmlType);
XmlTypeMapping xmlType =
(new SoapReflectionImporter()).ImportTypeMapping(obj.Ge tType());
ser.Serialize(xw, obj);

If that's not good enough for you then you pretty much have to implement serialization by hand.

--
HTH
Christoph Schittko [MVP]
Software Architect, .NET Mentor

"Stuart Robertson" <sr*****@absolutesys.com> wrote in message news:OX**************@tk2msftngp13.phx.gbl...
I am trying to find a solution that will allow me to use XmlSerializer to serialize/deserialize a collection of objects where a given object is shared between two or more other objects, and not create duplicate XML representations of the shared object, but instead use IDREFs to refer to the shared object.

The XML I'm trying to produce is as follows (where "href" is an IDREF):
<?xml version="1.0" encoding="utf-8"?>
<MyRootClass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BusinessEvent Id="1" DisplayName="A Test Event" />
<Conditions>
<EventCondition Id="2" DisplayName="Condition 1">
<TheEvent href="1"/>
</EventCondition>
<EventCondition Id="3" DisplayName="Condition 2">
<TheEvent href="1"/>
</EventCondition>
</Conditions>
</MyRootClass>
However, the XML produced by XmlSerializer is the following:
<?xml version="1.0" encoding="utf-8"?>
<MyRootClass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BusinessEvent Id="1" DisplayName="A Test Event" />
<Conditions>
<EventCondition Id="2" DisplayName="Condition 1">
<TheEvent Id="1" DisplayName="A Test Event" />
</EventCondition>
<EventCondition Id="3" DisplayName="Condition 2">
<TheEvent Id="1" DisplayName="A Test Event" />
</EventCondition>
</Conditions>
</MyRootClass>
The code used to produce the (incorrect) XML is as follows:
using System;
using System.Collections;
using System.IO;
using System.Xml.Serialization;
using System.Xml;

public class TestC {
public static void Main() {
TestC test = new TestC();
test.SerializeDocument("sharedEvent.xml");
}

public void SerializeDocument(string filename) {
XmlSerializer s = new XmlSerializer(typeof(MyRootClass));

using (TextWriter writer= new StreamWriter(filename)) {
MyRootClass myRootClass = new MyRootClass();

BusinessEvent evt = new BusinessEvent("1", "A Test Event");
myRootClass.TheSharedEvent = evt;

EventCondition ec1 = new EventCondition("2", "Condition 1");
ec1.TheEvent = evt;
myRootClass.Conditions.Add(ec1);

EventCondition ec2 = new EventCondition("3", "Condition 2");
ec2.TheEvent = evt;
myRootClass.Conditions.Add(ec2);

s.Serialize(writer, myRootClass);
}
}
}

// This is the root class that will be serialized.
public class MyRootClass {
[XmlElement("BusinessEvent")]
public BusinessEvent TheSharedEvent;

[XmlArrayItem(IsNullable=true, Type = typeof(EventCondition))]
[XmlArray]
public IList Conditions = new ArrayList();
}

// A single instance of BusinessEvent will be shared by two EventCondition instances
public class BusinessEvent {
[XmlAttribute(DataType="ID")]
public string Id;

[XmlAttribute]
public string DisplayName;

public BusinessEvent() {}
public BusinessEvent(string Id, string DisplayName) {
this.Id = Id;
this.DisplayName = DisplayName;
}
}

// Two EventCondition instances will refer to the same (single) BusinessEvent instance
public class EventCondition {
[XmlAttribute(DataType="ID")]
public string Id;

[XmlAttribute]
public string DisplayName;

//[XmlAttribute(DataType="IDREF")]
public BusinessEvent TheEvent;

public EventCondition() {}
public EventCondition(string Id, string DisplayName) {
this.Id = Id;
this.DisplayName = DisplayName;
}
}

Any ideas or pointers on how to achieve the IDREF bit will be greatly appreciated.
Nov 11 '05 #3
Christoph,
that doesn't sound like an error that's happening just because of the SOAP style format. Any chance your output would not result in well-formed XML? Are you writing into a fresh, new, clean XmlTextWriter ?
The code I'm using is shown below (and yes, I'm using a fresh, new, clean XmlTextWriter - see the bolded text). I'm trying this using .NET Framework 1.1, but it fails in most situations.
using System;
using System.Collections;
using System.IO;
using System.Xml.Serialization;
using System.Xml;

public class TestD {
public static void Main() {
TestD test = new TestD();
test.SerializeUsingSoapFormatter("sharedEvent_SOAP .xml");
}

public void SerializeUsingSoapFormatter(string filename) {
XmlTextWriter writer = new XmlTextWriter(filename, null);
MyRootClass myRootClass = new MyRootClass();

BusinessEvent evt = new BusinessEvent("1", "A Test Event");
myRootClass.TheSharedEvent = evt;

EventCondition ec1 = new EventCondition("2", "Condition 1");
ec1.TheEvent = evt;
myRootClass.Conditions.Add(ec1);

EventCondition ec2 = new EventCondition("3", "Condition 2");
ec2.TheEvent = evt;
myRootClass.Conditions.Add(ec2);

XmlTypeMapping xmlTypeMapping = (new SoapReflectionImporter()).ImportTypeMapping(myRoot Class.GetType());
XmlSerializer ser = new XmlSerializer(xmlTypeMapping);
ser.Serialize(writer, myRootClass);
}
}

// This is the root class that will be serialized.
public class MyRootClass {
[XmlElement("BusinessEvent")]
public BusinessEvent TheSharedEvent;

[XmlArrayItem(IsNullable=true, Type = typeof(EventCondition))]
[XmlArray]
public IList Conditions = new ArrayList();
}

// An instance of BusinessEvent will be shared by two EventCondition instances
public class BusinessEvent {
public string Id;
[XmlAttribute]
public string DisplayName;

public BusinessEvent() {}
public BusinessEvent(string Id, string DisplayName) {
this.Id = Id;
this.DisplayName = DisplayName;
}
}

// Two EventCondition instances will refer to the same (single) BusinessEvent instance
public class EventCondition {
public string Id;
[XmlAttribute]
public string DisplayName;
public BusinessEvent TheEvent;

public EventCondition() {}
public EventCondition(string Id, string DisplayName) {
this.Id = Id;
this.DisplayName = DisplayName;
}
}

Nov 11 '05 #4
Stuart,

I am sorry if I wasn't clear enough. The with the Soap 1.1 Section 5 encoding, EVERY object in the object graph will be serialized as a top level element, which does not result in well-formed XML unless you enclose the serialized output in a common element. If you don't write a common parent element the underlying XmlTextWriter will complain ( throw an exception ) when you are attempting to write a 2nd top level element.

Everything will work once you add a line like this

XmlSerializer ser = new XmlSerializer(xmlTypeMapping);
writer.WriteStartElement( "myCommonRoot" );
ser.Serialize(writer, myRootClass);
writer.WriteEndElement(); // myCommonRoot

and then manually skip over that element when you deserialize.

--
HTH
Christoph Schittko [MVP]
Software Architect, .NET Mentor
"Stuart Robertson" <sr*****@absolutesys.com> wrote in message news:O#**************@tk2msftngp13.phx.gbl...
Christoph,
that doesn't sound like an error that's happening just because of the SOAP style format. Any chance your output would not result in well-formed XML? Are you writing into a fresh, new, clean XmlTextWriter ?
The code I'm using is shown below (and yes, I'm using a fresh, new, clean XmlTextWriter - see the bolded text). I'm trying this using .NET Framework 1.1, but it fails in most situations.
using System;
using System.Collections;
using System.IO;
using System.Xml.Serialization;
using System.Xml;

public class TestD {
public static void Main() {
TestD test = new TestD();
test.SerializeUsingSoapFormatter("sharedEvent_SOAP .xml");
}

public void SerializeUsingSoapFormatter(string filename) {
XmlTextWriter writer = new XmlTextWriter(filename, null);
MyRootClass myRootClass = new MyRootClass();

BusinessEvent evt = new BusinessEvent("1", "A Test Event");
myRootClass.TheSharedEvent = evt;

EventCondition ec1 = new EventCondition("2", "Condition 1");
ec1.TheEvent = evt;
myRootClass.Conditions.Add(ec1);

EventCondition ec2 = new EventCondition("3", "Condition 2");
ec2.TheEvent = evt;
myRootClass.Conditions.Add(ec2);

XmlTypeMapping xmlTypeMapping = (new SoapReflectionImporter()).ImportTypeMapping(myRoot Class.GetType());
XmlSerializer ser = new XmlSerializer(xmlTypeMapping);
ser.Serialize(writer, myRootClass);
}
}

// This is the root class that will be serialized.
public class MyRootClass {
[XmlElement("BusinessEvent")]
public BusinessEvent TheSharedEvent;

[XmlArrayItem(IsNullable=true, Type = typeof(EventCondition))]
[XmlArray]
public IList Conditions = new ArrayList();
}

// An instance of BusinessEvent will be shared by two EventCondition instances
public class BusinessEvent {
public string Id;
[XmlAttribute]
public string DisplayName;

public BusinessEvent() {}
public BusinessEvent(string Id, string DisplayName) {
this.Id = Id;
this.DisplayName = DisplayName;
}
}

// Two EventCondition instances will refer to the same (single) BusinessEvent instance
public class EventCondition {
public string Id;
[XmlAttribute]
public string DisplayName;
public BusinessEvent TheEvent;

public EventCondition() {}
public EventCondition(string Id, string DisplayName) {
this.Id = Id;
this.DisplayName = DisplayName;
}
}

Nov 11 '05 #5
Thanks. You learn something new everyday! :-)
I am sorry if I wasn't clear enough. The with the Soap 1.1 Section 5 encoding, EVERY object in the object graph will be serialized as a top level element, which does not result in well-formed XML unless you enclose the serialized output in a common element. If you don't write a common parent element the underlying XmlTextWriter will complain ( throw an exception ) when you are attempting to write a 2nd top level element.

Everything will work once you add a line like this

XmlSerializer ser = new XmlSerializer(xmlTypeMapping);
writer.WriteStartElement( "myCommonRoot" );
ser.Serialize(writer, myRootClass);
writer.WriteEndElement(); // myCommonRoot

and then manually skip over that element when you deserialize.

--
HTH
Christoph Schittko [MVP]
Software Architect, .NET Mentor
Nov 11 '05 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
by: Daniel Lim | last post by:
When using XmlSerializer, I notice that it does not normalize the single quote and double quote characters, i.e. does not change ' to &apos; and " to &quot. However, it does normalize other...
2
by: yinjennytam | last post by:
Hi all I'm learning XML and .NET and I saw an example of using XmlSerializer to deserialize an XML file to get the corresponding object in memory. I found it very useful for my purpose. ...
2
by: kedar kulkarni | last post by:
I am compiling product code on AIX 5.3 . There is a Trace funtion which has been exported from from of the shared objects and is intended to be imported in all other shared objects. The compiler...
0
by: swatisahasrabudhe | last post by:
I have a class that I serialize/deserialize using xmlserializer. There are a few properties with char datatype. I have a few xml files from which I want to create the objects. While deserializing...
1
by: Yewen Tang | last post by:
I have a schema file datamodel.xsd, element "properties" is declared as a type of "baseProperty". The schema file also defines "derivedProperty" is a derived type of "baseProperty". <?xml...
1
by: smalpani | last post by:
am looking for a tutorial/resource on the concept of dll s and shared objects. How they are created and when where and how they are loaded and by whom. Also it would be nice if the experts...
2
by: bindu123 | last post by:
Hi All, I have to generate a line chart in C on windows, using distance in the X-axis and throughput in Y-axis. Is it possible to generate charts using C programming in windows ? and i also i...
0
by: Teka Cherenet | last post by:
I am newer for programming world in C# and SQL Server. so I wonder if it is possible to have a sample code which illustrates how to generate report using C# code. thank you
0
by: Ankit Khare | last post by:
I need to push the .so(shared objects) of my application(written in C) into the new MeeGo operating system.I have never done this porting before and have no clue where do i push them,which cross...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.