Ejemplo n.º 1
0
        public void Roundtrip_WorksGood()
        {
            Player player = PersonFactory.CreatePlayer();

            var settings = new JsonSerializerSettings
            {
                TypeNameHandling = TypeNameHandling.Auto,
            };

            var serializer = JsonSerializer.CreateDefault(settings);

            JToken token = JToken.FromObject(player, serializer);

            var converter = new JTokenConverter(JsonXmlSettings.Defaults);

            var xnode = converter.ToXNode(token);

            var actualXml = new XElement(
                XNamespace.None.GetName("wrap"),
                new XAttribute(XNamespace.Xmlns.GetName("jxml"), "http://www.xmlsh.org/jxml"),
                new XAttribute(XNamespace.Xmlns.GetName("jsonx"), "http://www.json.net/xml"),
                xnode);

            var expectedXml = XDocument.Parse(@"<wrap xmlns:jxml=""http://www.xmlsh.org/jxml"" xmlns:jsonx=""http://www.json.net/xml"">
  <jxml:object>
    <jxml:member name=""TelephoneNumbers"">
      <jxml:array>
        <jxml:object>
          <jxml:member name=""Type"">
            <jsonx:integer>0</jsonx:integer>
          </jxml:member>
          <jxml:member name=""CountryCode"">
            <jxml:string>44</jxml:string>
          </jxml:member>
          <jxml:member name=""AreaCode"">
            <jxml:string>151</jxml:string>
          </jxml:member>
          <jxml:member name=""LocalNumber"">
            <jxml:string>123 4567</jxml:string>
          </jxml:member>
          <jxml:member name=""RawNumber"">
            <jxml:null />
          </jxml:member>
        </jxml:object>
        <jxml:object>
          <jxml:member name=""Type"">
            <jsonx:integer>1</jsonx:integer>
          </jxml:member>
          <jxml:member name=""CountryCode"">
            <jxml:null />
          </jxml:member>
          <jxml:member name=""AreaCode"">
            <jxml:null />
          </jxml:member>
          <jxml:member name=""LocalNumber"">
            <jxml:null />
          </jxml:member>
          <jxml:member name=""RawNumber"">
            <jxml:string>+31 (141) 123 4567</jxml:string>
          </jxml:member>
        </jxml:object>
      </jxml:array>
    </jxml:member>
    <jxml:member name=""Addresses"">
      <jxml:array>
        <jxml:object>
          <jxml:member name=""Type"">
            <jsonx:integer>0</jsonx:integer>
          </jxml:member>
          <jxml:member name=""PropertyNumber"">
            <jxml:null />
          </jxml:member>
          <jxml:member name=""PropertyName"">
            <jxml:string>14</jxml:string>
          </jxml:member>
          <jxml:member name=""Street"">
            <jxml:string>Some Road</jxml:string>
          </jxml:member>
          <jxml:member name=""Locality"">
            <jxml:string>Some town</jxml:string>
          </jxml:member>
          <jxml:member name=""Region"">
            <jxml:string>My county</jxml:string>
          </jxml:member>
          <jxml:member name=""Country"">
            <jxml:string>My country</jxml:string>
          </jxml:member>
          <jxml:member name=""PostalCode"">
            <jxml:string>RG5 3AS</jxml:string>
          </jxml:member>
        </jxml:object>
        <jxml:object>
          <jxml:member name=""Type"">
            <jsonx:integer>1</jsonx:integer>
          </jxml:member>
          <jxml:member name=""PropertyNumber"">
            <jsonx:integer>5</jsonx:integer>
          </jxml:member>
          <jxml:member name=""PropertyName"">
            <jxml:null />
          </jxml:member>
          <jxml:member name=""Street"">
            <jxml:string>Some Road</jxml:string>
          </jxml:member>
          <jxml:member name=""Locality"">
            <jxml:string>Some town</jxml:string>
          </jxml:member>
          <jxml:member name=""Region"">
            <jxml:string>My county</jxml:string>
          </jxml:member>
          <jxml:member name=""Country"">
            <jxml:string>My country</jxml:string>
          </jxml:member>
          <jxml:member name=""PostalCode"">
            <jxml:string>RG5 3AS</jxml:string>
          </jxml:member>
        </jxml:object>
      </jxml:array>
    </jxml:member>
    <jxml:member name=""DateOfBirth"">
      <jsonx:dateTime>1965-04-15T00:00:00</jsonx:dateTime>
    </jxml:member>
    <jxml:member name=""Notes"">
      <jxml:array>
        <jxml:object>
          <jxml:member name=""$type"">
            <jxml:string>JsonXml.Test.POCOs.SpecialNote, JsonXml.Test</jxml:string>
          </jxml:member>
          <jxml:member name=""Blah"">
            <jsonx:integer>1</jsonx:integer>
          </jxml:member>
          <jxml:member name=""Note"">
            <jxml:string>This is some note content unicode--&gt;ᶍ&lt;--unicode</jxml:string>
          </jxml:member>
          <jxml:member name=""Recorded"">
            <jsonx:dateTimeOffset>2013-04-06T10:53:28.456+05:00</jsonx:dateTimeOffset>
          </jxml:member>
        </jxml:object>
      </jxml:array>
    </jxml:member>
    <jxml:member name=""Image"">
      <jsonx:bytes>EhUX</jsonx:bytes>
    </jxml:member>
    <jxml:member name=""Website"">
      <jsonx:uri>http://mywebsite.com/</jsonx:uri>
    </jxml:member>
    <jxml:member name=""TimeWithClub"">
      <jsonx:duration>P237DT5H4M17S</jsonx:duration>
    </jxml:member>
    <jxml:member name=""ID"">
      <jsonx:uuid>0d476eb3-0f4d-40ef-81a7-ea9d2bdefc18</jsonx:uuid>
    </jxml:member>
    <jxml:member name=""Name"">
      <jxml:object>
        <jxml:member name=""Title"">
          <jxml:string>Mr</jxml:string>
        </jxml:member>
        <jxml:member name=""FirstName"">
          <jxml:string>Joe</jxml:string>
        </jxml:member>
        <jxml:member name=""LastName"">
          <jxml:string>Bloggs</jxml:string>
        </jxml:member>
      </jxml:object>
    </jxml:member>
  </jxml:object>
</wrap>").FirstNode;

            Assert.IsTrue(XNode.DeepEquals(expectedXml, actualXml), "XNode should be identical");

            var token2 = converter.ToJToken(xnode);

            var player2 = token2.ToObject <Player>(serializer);

            JToken token3 = JToken.FromObject(player2, serializer);

            Assert.IsTrue(JToken.DeepEquals(token, token3), "Tokens should match");
        }