Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ReadSimpleDictionary()

void System.Runtime.Serialization.Json.ReflectionJsonReader.ReadSimpleDictionary ( XmlReaderDelegator xmlReader,
XmlObjectSerializerReadContext context,
CollectionDataContract collectionContract,
Type keyValueType,
object dictionary )
inlineprivate

Definition at line 78 of file ReflectionJsonReader.cs.

79 {
80 Type[] genericArguments = keyValueType.GetGenericArguments();
83 int num = 0;
84 while (type.IsGenericType && type.GetGenericTypeDefinition() == Globals.TypeOfNullable)
85 {
86 num++;
87 type = type.GetGenericArguments()[0];
88 }
89 ClassDataContract classDataContract = (ClassDataContract)collectionContract.ItemContract;
90 DataContract memberTypeContract = classDataContract.Members[0].MemberTypeContract;
92 if (type == Globals.TypeOfString || type == Globals.TypeOfObject)
93 {
94 keyParseMode = KeyParseMode.AsString;
95 }
96 else if (type.IsEnum)
97 {
98 keyParseMode = KeyParseMode.UsingParseEnum;
99 }
100 else if (memberTypeContract.ParseMethod != null)
101 {
102 keyParseMode = KeyParseMode.UsingCustomParse;
103 }
104 if (keyParseMode == KeyParseMode.Fail)
105 {
106 throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.SR.Format(System.SR.KeyTypeCannotBeParsedInSimpleDictionary, DataContract.GetClrTypeFullName(collectionContract.UnderlyingType), DataContract.GetClrTypeFullName(type))));
107 }
108 while (true)
109 {
110 switch (xmlReader.MoveToContent())
111 {
112 case XmlNodeType.EndElement:
113 return;
114 default:
115 throw XmlObjectSerializerReadContext.CreateUnexpectedStateException(XmlNodeType.Element, xmlReader);
116 case XmlNodeType.Element:
117 {
118 context.IncrementItemCount(1);
119 string jsonMemberName = XmlObjectSerializerReadContextComplexJson.GetJsonMemberName(xmlReader);
120 object key = keyParseMode switch
121 {
123 KeyParseMode.UsingCustomParse => Type.GetTypeCode(memberTypeContract.UnderlyingType) switch
124 {
125 TypeCode.Boolean => bool.Parse(jsonMemberName),
126 TypeCode.Int16 => short.Parse(jsonMemberName),
127 TypeCode.Int32 => int.Parse(jsonMemberName),
128 TypeCode.Int64 => long.Parse(jsonMemberName),
129 TypeCode.Char => char.Parse(jsonMemberName),
130 TypeCode.Byte => byte.Parse(jsonMemberName),
131 TypeCode.SByte => sbyte.Parse(jsonMemberName),
132 TypeCode.Double => double.Parse(jsonMemberName),
133 TypeCode.Decimal => decimal.Parse(jsonMemberName),
134 TypeCode.Single => float.Parse(jsonMemberName),
135 TypeCode.UInt16 => ushort.Parse(jsonMemberName),
136 TypeCode.UInt32 => uint.Parse(jsonMemberName),
137 TypeCode.UInt64 => ulong.Parse(jsonMemberName),
138 _ => memberTypeContract.ParseMethod.Invoke(null, new object[1] { jsonMemberName }),
139 },
140 _ => jsonMemberName,
141 };
142 if (num > 0)
143 {
144 throw new NotImplementedException(System.SR.Format(System.SR.MustBeGreaterThanZero, num));
145 }
146 object value = ReflectionReadValue(xmlReader, context, type2, string.Empty, string.Empty);
148 break;
149 }
150 }
151 }
152 }
object ReflectionReadValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, Type type, string name, string ns, PrimitiveDataContract primitiveContractForOriginalType=null)
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string MustBeGreaterThanZero
Definition SR.cs:710
static string KeyTypeCannotBeParsedInSimpleDictionary
Definition SR.cs:630
Definition SR.cs:7

References System.Runtime.Serialization.XmlObjectSerializerReadContext.CreateUnexpectedStateException(), System.dictionary, System.Runtime.Serialization.Dictionary, System.SR.Format(), System.Runtime.Serialization.DataContract.GetClrTypeFullName(), System.Type.GetGenericArguments(), System.Runtime.Serialization.Json.XmlObjectSerializerReadContextComplexJson.GetJsonMemberName(), System.Type.GetTypeCode(), System.Runtime.Serialization.XmlObjectSerializerContext.IncrementItemCount(), System.key, System.SR.KeyTypeCannotBeParsedInSimpleDictionary, System.SR.MustBeGreaterThanZero, System.Enum.Parse(), System.Runtime.Serialization.ReflectionReader.ReflectionReadValue(), System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(), System.type, System.Runtime.Serialization.Globals.TypeOfNullable, System.Runtime.Serialization.Globals.TypeOfObject, System.Runtime.Serialization.Globals.TypeOfString, and System.value.

Referenced by System.Runtime.Serialization.Json.ReflectionJsonReader.ReflectionReadSpecialCollection().