public void WriteObjectElement(ObjectElementAttribute attribute, object writer, object value, WriteSettings settings, ObjectPropertyInfo info, object serializerData) { DictionaryBuilder builder = writer.Convert <DictionaryBuilder>(); QName name = info.QName; if (attribute.IsMultiple) { IList list = value.Convert <IList>(); List <Dictionary <string, object> > itemList = new List <Dictionary <string, object> >(list.Count); foreach (var itemValue in list) { DictionaryBuilder subBuilder = builder.CreateBuilder(); WriteObject(subBuilder, itemValue, info.ModelName, settings, name, null); itemList.Add(subBuilder.Data); } builder.Add(name.LocalName, itemList); } else { DictionaryBuilder subBuilder = builder.CreateBuilder(); WriteObject(subBuilder, value, info.ModelName, settings, name, null); builder.Add(name.LocalName, subBuilder); } }
public void WriteDynamicDictionary(DynamicDictionaryAttribute attribute, object writer, object value, WriteSettings settings, ObjectPropertyInfo info, object serializerData) { IDictionary dict = value.Convert <IDictionary>(); DictionaryBuilder builder = writer.Convert <DictionaryBuilder>(); QName name = info.QName; DictionaryBuilder subDict = builder.CreateBuilder(); foreach (DictionaryEntry item in dict) { DictionaryBuilder subDictItem = builder.CreateBuilder(); WriteObject(subDictItem, item.Value, info.ModelName, settings, name, null); subDict.Add(item.Key.ToString(), subDictItem); } builder.Add(name.LocalName, subDict); }
public void WriteDictionary(DictionaryAttribute attribute, object writer, object value, WriteSettings settings, ObjectPropertyInfo info, object serializerData) { IDictionary dict = value.Convert <IDictionary>(); DictionaryBuilder builder = writer.Convert <DictionaryBuilder>(); QName name = info.QName; DictionaryBuilder subDict = builder.CreateBuilder(); foreach (DictionaryEntry item in dict) { subDict.Add(item.Key.ToString(), ObjectUtil.ToString(info.Converter, item.Value, settings)); } builder.Add(name.LocalName, subDict); }
public void WriteTagElement(TagElementAttribute attribute, object writer, object value, WriteSettings settings, ObjectPropertyInfo info, object serializerData) { DictionaryBuilder builder = writer.Convert <DictionaryBuilder>(); QName name = info.QName; var infoArray = attribute.ChildElements.CreateOrderPropertyInfoList().ToArray(); TkDebug.Assert(infoArray.Length == 1, string.Format(ObjectUtil.SysCulture, "TagElement的子节点必须有且仅有一个,当前{1}下有{0}个", infoArray.Length, name), this); DictionaryBuilder subBuilder = builder.CreateBuilder(); var item = infoArray[0]; if (item.IsSingle) { item.Content.Attribute.WriteObject(this, subBuilder, value, settings, item.Content, serializerData); builder.Add(name.LocalName, subBuilder); } else { IList list = value as IList; if (list != null) { if (list.Count > 0) { var property = item.Get(list[0].GetType()); property.Attribute.WriteObject(this, subBuilder, value, settings, property, serializerData); builder.Add(name.LocalName, subBuilder); } } else { var property = item.Get(value.GetType()); property.Attribute.WriteObject(this, subBuilder, value, settings, property, serializerData); builder.Add(name.LocalName, subBuilder); } } }