Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XPathQueryGenerator.cs
Go to the documentation of this file.
5using System.Text;
6using System.Xml;
7
9
10public static class XPathQueryGenerator
11{
12 private sealed class ExportContext
13 {
15
16 private int _nextPrefix;
17
18 private readonly StringBuilder _xPathBuilder;
19
21
22 public string XPath => _xPathBuilder.ToString();
23
25 {
27 string text = SetNamespace(rootContract.TopLevelElementNamespace.Value);
28 _xPathBuilder = new StringBuilder("/" + text + ":" + rootContract.TopLevelElementName.Value);
29 }
30
36
38 {
39 _xPathBuilder.Append("/" + prefix + ":" + contextMember.Name);
40 }
41
42 public string SetNamespace(string ns)
43 {
44 string text = _namespaces.LookupPrefix(ns);
45 if (text == null || text.Length == 0)
46 {
49 }
50 return text;
51 }
52 }
53
54 private const string XPathSeparator = "/";
55
56 private const string NsSeparator = ":";
57
58 [RequiresUnreferencedCode("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")]
63
64 [RequiresUnreferencedCode("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")]
84
85 [RequiresUnreferencedCode("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")]
94
95 [RequiresUnreferencedCode("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")]
97 {
98 string prefix = context.SetNamespace(contract.Namespace.Value);
100 {
101 if (dataMember.MemberInfo.Name == memberNode.Name && dataMember.MemberInfo.DeclaringType.IsAssignableFrom(memberNode.DeclaringType))
102 {
103 context.WriteChildToContext(dataMember, prefix);
104 return dataMember.MemberTypeContract;
105 }
106 }
108 }
109
111 {
112 if (contract.BaseContract != null)
113 {
114 foreach (DataMember dataMember in GetDataMembers(contract.BaseContract))
115 {
116 yield return dataMember;
117 }
118 }
119 if (contract.Members == null)
120 {
121 yield break;
122 }
123 foreach (DataMember member in contract.Members)
124 {
125 yield return member;
126 }
127 }
128}
static DataContract GetDataContract(Type type)
void WriteChildToContext(DataMember contextMember, string prefix)
static string CreateFromDataContractSerializer(Type type, MemberInfo[] pathToMember, StringBuilder? rootElementXpath, out XmlNamespaceManager namespaces)
static DataContract ProcessDataContract(DataContract contract, ExportContext context, MemberInfo memberNode)
static DataContract ProcessClassDataContract(ClassDataContract contract, ExportContext context, MemberInfo memberNode)
static string CreateFromDataContractSerializer(Type type, MemberInfo[] pathToMember, out XmlNamespaceManager namespaces)
static IEnumerable< DataMember > GetDataMembers(ClassDataContract contract)
static SerializationException CreateSerializationException(string errorMessage)
static string QueryGeneratorPathToMemberNotFound
Definition SR.cs:652
Definition SR.cs:7
override string ToString()
StringBuilder Append(char value, int repeatCount)
virtual ? string LookupPrefix(string uri)
virtual void AddNamespace(string prefix, string uri)