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))); }
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 }); }