Esempio n. 1
0
        public static           XmlPropertyInfo[] GetInfo(XmlObjectContract contract, XmlNameTable nameTable, XmlSerializationContext context)
        {
            var propertyInfos = new XmlPropertyInfo[contract.Properties.Count];

            for (var i = 0; i < propertyInfos.Length; i++)
            {
                var property = contract.Properties[i];
                propertyInfos[i].Property = property;

                if (!property.IsCollection)
                {
                    propertyInfos[i].NameRef.Reset(property.Name, nameTable);
                    propertyInfos[i].KnownNameRefs = XmlItemInfo.GetKnownNameRefs(property, nameTable);
                }
                else
                {
                    var typeContext         = context.Settings.GetTypeContext(property.ValueType);
                    var collectionConverter = typeContext.ReadConverter as XmlCollectionConverter;

                    if (collectionConverter == null)
                    {
                        throw new XmlSerializationException(string.Format("Readable collection converter for the type \"{0}\" is not found.", property.ValueType));
                    }

                    var item = property.Item ?? typeContext.Contract.Root;

                    propertyInfos[i].CollectionProxy = collectionConverter.CreateProxy(property.ValueType);
                    propertyInfos[i].Item            = item;
                    propertyInfos[i].NameRef.Reset(item.Name, nameTable);
                    propertyInfos[i].KnownNameRefs = XmlItemInfo.GetKnownNameRefs(item, nameTable);
                }
            }

            return(propertyInfos);
        }
        public void ResolveUnknownContractByFallbackTest()
        {
            var fooContract = new XmlObjectContract(typeof(Foo), new XmlName("foo"));
            var contracts   = new XmlContract[] { fooContract };
            var resolver    = new XmlCustomContractResolver(contracts, new XmlContractResolver());

            var actual = resolver.ResolveContract(typeof(FooBar));

            Assert.AreSame(typeof(FooBar), actual.ValueType);
        }
        public void ResolveKnownContractTest()
        {
            var fooContract    = new XmlObjectContract(typeof(Foo), new XmlName("foo"));
            var fooBarContract = new XmlObjectContract(typeof(FooBar), new XmlName("fooBar"));

            var contracts = new XmlContract[] { fooBarContract, fooContract };

            var resolver = new XmlCustomContractResolver(contracts, null);

            Assert.AreSame(fooContract, resolver.ResolveContract(typeof(Foo)));
            Assert.AreSame(fooBarContract, resolver.ResolveContract(typeof(FooBar)));
        }
Esempio n. 4
0
        public static XmlObjectContractBuilder Create(XmlObjectContract contract)
        {
            if (contract == null)
            {
                throw new ArgumentNullException(nameof(contract));
            }

            return(new XmlObjectContractBuilder(contract.ValueType)
            {
                Name = contract.Name,
                TypeHandling = contract.TypeHandling,
                Properties = XmlPropertyBuilderCollection.Create(contract.Properties),
                Item = contract.Item != null?XmlItemBuilder.Create(contract.Item) : null
            });
        }