GithubHelp home page GithubHelp logo

Comments (3)

axunonb avatar axunonb commented on July 20, 2024 1

Confirmed undesired behavior. Working sample attached.

Original object:
Original

Deserialized object:
Deserialized

YAXLib_Issue_50.zip

from yaxlib.

axunonb avatar axunonb commented on July 20, 2024

If [YAXAttributeFor("..")] in class GenericValue<T> is omitted serialization/de-serialization works.

from yaxlib.

axunonb avatar axunonb commented on July 20, 2024

@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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.