Comments (3)
Confirmed undesired behavior. Working sample attached.
from yaxlib.
If [YAXAttributeFor("..")]
in class GenericValue<T>
is omitted serialization/de-serialization works.
from yaxlib.
@304NotModified @NKnusperer
Some thoughts on this issue. Do you agree?
1. Serialization
The XML
output from serialization reflects what is written in code.
2. De-serialization
The XML
result coming from serialization cannot be de-serialized to the original Dictionary<int, GenericValue<int>>
. While the Key
of the dictionary can be identified, the Value
as generic class cannot: The serializer "sees" the properties of GenericValue<int>
as attributes, but there is no indication that the Value
should become an instance of GenericValue<int>
.
3. Conclusion
It is possible, that under certain conditions result of a serialization cannot be used for de-serialization.
This is not a bug. The issue should be closed.
4. Code for this example, that allows for de-serialization of serialized XML
public class DictionaryValueGenericClassAsAttribute
{
[YAXErrorIfMissed(YAXExceptionTypes.Ignore)]
[YAXDictionary(EachPairName = "Entry", KeyName = "DictKey", ValueName = "DictValue", SerializeKeyAs = YAXNodeTypes.Attribute,
SerializeValueAs = YAXNodeTypes.Element)]
public Dictionary<int, GenericValue<int>> Values { get; set; }
}
public class GenericValue<T> where T : IComparable<T>
{
[YAXAttributeForClass]
[YAXErrorIfMissed(YAXExceptionTypes.Error)]
public T Value { get; set; }
[YAXAttributeForClass]
[YAXErrorIfMissed(YAXExceptionTypes.Ignore)]
public T DefaultValue { get; set; }
}
Serialized:
<DictionaryValueGenericClassAsAttribute>
<Values>
<Entry DictKey="0">
<DictValue Value="10" DefaultValue="100" />
</Entry>
<Entry DictKey="1">
<DictValue Value="11" DefaultValue="101" />
</Entry>
<Entry DictKey="2">
<DictValue Value="12" DefaultValue="102" />
</Entry>
<Entry DictKey="3">
<DictValue Value="13" DefaultValue="103" />
</Entry>
<Entry DictKey="4">
<DictValue Value="14" DefaultValue="104" />
</Entry>
</Values>
</DictionaryValueGenericClassAsAttribute>
from yaxlib.
Related Issues (20)
- Generic deserialization methods should not hide base methods with 'new', e.g. with a generic base class HOT 1
- Possible regression caused by PR #183 HOT 9
- Extend tests to cover YAXSerializer and YAXSerializer<T> HOT 2
- Extend caching and pooling for better performance HOT 10
- Split IYAXSerializer<T> to IYAXSerializer<T> and IYAXDeserializer<T> HOT 7
- Make Exception a KnownType HOT 4
- All public members of YAXSerializer (generic/non-generic) should be fully covered by unit tests HOT 1
- How serialize a list as an attribute HOT 7
- Extend SerializationContext for pre-processing in ICustomSerializer and IKnownType
- Add unit tests for YAXCollectionItemTypeAttribute and YAXElementForAttribute
- Add YAXSerializationOptions.StripInvalidXmlChars HOT 3
- Structs are not serialized correctly HOT 3
- Update docs for new v4 features
- Multiple Elements with Same Name? How to Deserialize?
- Add support for DateOnly and TimeOnly types
- Is it possible deserialize to property by attribute name and inner xml with YAXLib?
- Serializing/Deserializing ValueTuples HOT 1
- Serialize not filtering properties correctly in .NET Standard HOT 6
- Serialized strings that use the stringbuilder pool throw when the string's length is > 1024 (DefaultStringBuilderCapacity).
- Collection Deserialization with RecursiveWithNoContainingElement HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from yaxlib.