Hi Folks!
Here's a strange behaviour:
Without a properties SET accessor (see code below), the property will not
serialize.
public class myObject
{
private string _myAttribute;
[XmlAttribute("M yAttrib")]
public string myAttribute
{
get { return _myAttribute; }
set { _myAttribute = value; } //this accessor must be present to
serialize
}
public myObject()
{
_myAttribute="s et during construction... ";
}
}
I would prefer the property (myAttribute) be accessible only by GET but if I
want it to serialize I must allow the SET. Is there any way around this?
Rein 6 3388
Rein,
This makes sense. XML serialization uses the accesor to the property to
set the value, it does not access the fields on the class level. If you
want to get around this, use the SoapFormatter and use regular
serialization.
Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard. caspershouse.co m
"Rein Petersen" <rm********@bog us.hotmail.com> wrote in message
news:uA******** ******@TK2MSFTN GP11.phx.gbl... Hi Folks!
Here's a strange behaviour:
Without a properties SET accessor (see code below), the property will not serialize.
public class myObject {
private string _myAttribute;
[XmlAttribute("M yAttrib")] public string myAttribute { get { return _myAttribute; } set { _myAttribute = value; } //this accessor must be present to serialize }
public myObject() { _myAttribute="s et during construction... "; }
}
I would prefer the property (myAttribute) be accessible only by GET but if
I want it to serialize I must allow the SET. Is there any way around this?
Rein
Rein,
You need the set accessor if you are serialising, as you need to provide a
way to de-serialise.
You can apply the "ReadOnlyAttrib ute" to the property, which prevents the
user from changing the property at design time.
You could probably also have your serialized property completely hidden
(apply the Browsable, and EditorBrowsable attributes), and have another
property with just the Get which is not serialized.
Tim.
"Rein Petersen" <rm********@bog us.hotmail.com> wrote in message
news:uA******** ******@TK2MSFTN GP11.phx.gbl... Hi Folks!
Here's a strange behaviour:
Without a properties SET accessor (see code below), the property will not serialize.
public class myObject {
private string _myAttribute;
[XmlAttribute("M yAttrib")] public string myAttribute { get { return _myAttribute; } set { _myAttribute = value; } //this accessor must be present to serialize }
public myObject() { _myAttribute="s et during construction... "; }
}
I would prefer the property (myAttribute) be accessible only by GET but if
I want it to serialize I must allow the SET. Is there any way around this?
Rein
> This makes sense. XML serialization uses the accesor to the property
to set the value, it does not access the fields on the class level. If you want to get around this, use the SoapFormatter and use regular serialization.
Hmmm, I can't say I agree it makes sense - I'm not asking the serialization
process to SET the property, but rather to GET it and serialize it.
Is this really a sensible behaviour? Can anyone explain why this is?
Admittedly, I'm not keen on the SoapFormatter because I think SOAP sucks and
I doubt that I will be able to format the resulting serialized xml as I
require. Are there any decent resources detailing customizing the
serializing using the SoapFormatter where I can confirm this?
Rein
Thanks Tim,
Your explanation and suggestions solved my problem.
Rein
"Tim Johnson" <ti******@cae.c a> wrote in message
news:bn******** **@dns3.cae.ca. .. Rein,
You need the set accessor if you are serialising, as you need to provide a way to de-serialise.
You can apply the "ReadOnlyAttrib ute" to the property, which prevents the user from changing the property at design time.
You could probably also have your serialized property completely hidden (apply the Browsable, and EditorBrowsable attributes), and have another property with just the Get which is not serialized.
Tim.
"Rein Petersen" <rm********@bog us.hotmail.com> wrote in message news:uA******** ******@TK2MSFTN GP11.phx.gbl... Hi Folks!
Here's a strange behaviour:
Without a properties SET accessor (see code below), the property will
not serialize.
public class myObject {
private string _myAttribute;
[XmlAttribute("M yAttrib")] public string myAttribute { get { return _myAttribute; } set { _myAttribute = value; } //this accessor must be present to serialize }
public myObject() { _myAttribute="s et during construction... "; }
}
I would prefer the property (myAttribute) be accessible only by GET but
if I want it to serialize I must allow the SET. Is there any way around this?
Rein
Rein,
It makes sense because the operation has to go two ways. If you are
able to serialize a value, then you need to be able to read the value from
the object. If you want to de-serialize an value then you need to be able
to write the value to the object. Since the XML Serializer handles both
operations, it needs to know that whatever it can read from, it can also
write to. Granted, the XML serializer could have been coded to ignore
elements that don't have a representation in the object model (and vice
versa), but I think that they wanted to get some sort of type-safety in
there.
The SoapFormatter is going to be different, in the sense that your
properties are not going to be serialized. Rather, your internal fields on
your class are going to be serialized. Now if you have a basic one-to-one
mapping between your fields and your properties, then this is ok. However,
if your properties are a composite of many values in the fields, then you
probably don't want to duplicate the business logic to calculate those
fields. In this case, a better approach would be to have a separate object
which has public read only fields which you can set through the constructor
of the object. Your object would create an instance of this object, setting
the values. Then, it would serialize that using the SoapFormatter. Your
XML will then be easier to manipulate.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard. caspershouse.co m
"Rein Petersen" <rm********@bog us.hotmail.com> wrote in message
news:%2******** **********@TK2M SFTNGP09.phx.gb l... This makes sense. XML serialization uses the accesor to the
property to set the value, it does not access the fields on the class level. If you want to get around this, use the SoapFormatter and use regular serialization. Hmmm, I can't say I agree it makes sense - I'm not asking the
serialization process to SET the property, but rather to GET it and serialize it.
Is this really a sensible behaviour? Can anyone explain why this is?
Admittedly, I'm not keen on the SoapFormatter because I think SOAP sucks
and I doubt that I will be able to format the resulting serialized xml as I require. Are there any decent resources detailing customizing the serializing using the SoapFormatter where I can confirm this?
Rein
Nicholas,
Thanks for the insightful distinctions between Xml Serializer and
SoapFormatter. I now understand how your suggestion to use the SoapFormatter
(ableit for an unconventional purpose), can provide flexibility in
conforming serialization to a desired schema.
If the goal of serialization is to represent a snapshot of an object's
state, then serializing it's private fields (over public properties) makes
sense.
I'm certain this is my solution.
Thanks again!
Rein
"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard .caspershouse.c om> wrote in
message news:eS******** *****@TK2MSFTNG P11.phx.gbl... Rein,
It makes sense because the operation has to go two ways. If you are able to serialize a value, then you need to be able to read the value from the object. If you want to de-serialize an value then you need to be able to write the value to the object. Since the XML Serializer handles both operations, it needs to know that whatever it can read from, it can also write to. Granted, the XML serializer could have been coded to ignore elements that don't have a representation in the object model (and vice versa), but I think that they wanted to get some sort of type-safety in there.
The SoapFormatter is going to be different, in the sense that your properties are not going to be serialized. Rather, your internal fields
on your class are going to be serialized. Now if you have a basic one-to-one mapping between your fields and your properties, then this is ok.
However, if your properties are a composite of many values in the fields, then you probably don't want to duplicate the business logic to calculate those fields. In this case, a better approach would be to have a separate
object which has public read only fields which you can set through the
constructor of the object. Your object would create an instance of this object,
setting the values. Then, it would serialize that using the SoapFormatter. Your XML will then be easier to manipulate.
-- - Nicholas Paldino [.NET/C# MVP] - mv*@spam.guard. caspershouse.co m
"Rein Petersen" <rm********@bog us.hotmail.com> wrote in message news:%2******** **********@TK2M SFTNGP09.phx.gb l... This makes sense. XML serialization uses the accesor to the
property to set the value, it does not access the fields on the class level. If
you want to get around this, use the SoapFormatter and use regular serialization.
Hmmm, I can't say I agree it makes sense - I'm not asking the serialization process to SET the property, but rather to GET it and serialize it.
Is this really a sensible behaviour? Can anyone explain why this is?
Admittedly, I'm not keen on the SoapFormatter because I think SOAP sucks and I doubt that I will be able to format the resulting serialized xml as I require. Are there any decent resources detailing customizing the serializing using the SoapFormatter where I can confirm this?
Rein
This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Jakob Bengtsson |
last post by:
Hi,
I have a form (which cannot be serialized).
In the form's code I declare an object like this (never
mind the object nor class name, it's for illustration
only):
Private WithEvents eventPublisher as EventPublisherClass
|
by: Angelos Karantzalis |
last post by:
Hi guys. I've come across a problem when I tried to serialize a class into
xml, only to discover that the parent class's XML Serialization properties
weren't included in the output xml.
Actually, the class I'm serializing is two steps down in the inheritance
ladder. It's got a parent class which also has a parent class :( All those
classes in the hierarchy are Xml Serializable, and I'd think that it should
be obvious that all...
|
by: Tobias Zimmergren |
last post by:
Hi, just wondering what serializing really is, and howto use it?
Thanks.
Tobias
__________________________________________________________________ Tobias
ICQ#: 55986339 Current ICQ status: + More ways to contact me
__________________________________________________________________
|
by: Derrick |
last post by:
Hello all;
I seem to be having some trouble serializing a class to XML. This code is a
cut & paste from a project which used it perfectly, but all of a sudden I'm
getting an error that the "dll ogerh_f6.dll or one of its dependancies
cannot be found". The class I'm serializing is quite simple, with a couple
of string properties marked with the XmlElementAttribute. The class is
marked with the Serializable attribute. As such, I don't...
|
by: Joe |
last post by:
Hello All:
Say I have a solution with two projects (Project1 and Project2) and each
project contains a class (Project1 contains Class1 and Project2 contains
Class2).
The projects don't reference each other. Here's my question: can I
serialize Class1 and use the serialized XML in Class2? How would Class2
de-serialize the XML to retrieve the Class1's properties? I don't see how I
can do this since Project2 doesn't even know about...
| |
by: axr |
last post by:
Having trouble with Serilization of objects that contain members which are of
type Interface
eg
public class SomeClass
{
ISomeInterface1 itf1;
ClassType1 ct1;
ISomeInterface2 itf2;
|
by: she_prog |
last post by:
I have a class derived from UserControl.
I need to serialize an object of this class, but only some properties
of it, as not all properties are serializable (some of the properties
coming from UserControl are like that). When serializing, how
could I ignore all the properties coming from the UserControl
class? I know there is XmlIgnoreAttribute, but how could I set it
to every property of UserControl, as it is not my class?
Thank you...
|
by: Jeremy |
last post by:
I've created a serializable class and put attributes around all the
properties that should be serialized. I return the class from a web
service, but my problem is that the wsdl for the web service is only
including the Values poperty, and nothing else. Also, when the object gets
serialized out, only the Values property gets serialized. I can't figure
out why.
I've included the serialized output from the webservice and the class code...
|
by: Karthik1979 |
last post by:
I have a custom class inherited from List<T> collection. Along with the base class functionality, I have included my additional properties. When serializing, only the base class items are serialized not my additional properties.
I have designed a business object collection like this and I have to pass it across the service layer. But in another end I’m getting partial data not all my information is getting de-serialized. Here is a sample...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it.
First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
|
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 tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
| |
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 Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |