private TranslatedFSString ReadTranslatedFSString(BinaryReader reader) { var str = new TranslatedFSString(); var valueLength = reader.ReadInt32(); str.Value = ReadString(reader, valueLength); var handleLength = reader.ReadInt32(); str.Handle = ReadString(reader, handleLength); var arguments = reader.ReadInt32(); str.Arguments = new List <TranslatedFSStringArgument>(arguments); for (int i = 0; i < arguments; i++) { var arg = new TranslatedFSStringArgument(); var argKeyLength = reader.ReadInt32(); arg.Key = ReadString(reader, argKeyLength); arg.String = ReadTranslatedFSString(reader); var argValueLength = reader.ReadInt32(); arg.Value = ReadString(reader, argValueLength); str.Arguments.Add(arg); } return(str); }
private TranslatedFSStringArgument ReadFSStringArgument(JsonReader reader) { var fs = new TranslatedFSStringArgument(); string key = null; while (reader.Read()) { if (reader.TokenType == JsonToken.EndObject) { break; } else if (reader.TokenType == JsonToken.PropertyName) { key = reader.Value.ToString(); } else if (reader.TokenType == JsonToken.String) { if (key == "key") { fs.Key = reader.Value.ToString(); } else if (key == "value") { fs.Value = reader.Value.ToString(); } else { throw new InvalidDataException("Unknown property encountered during TranslatedFSString argument parsing: " + key); } } else if (reader.TokenType == JsonToken.StartObject && key == "string") { fs.String = ReadTranslatedFSString(reader); } else { throw new InvalidDataException("Unexpected JSON token during parsing of TranslatedFSString argument: " + reader.TokenType); } } return(fs); }
private void ReadTranslatedFSString(TranslatedFSString fs) { fs.Value = reader["value"]; fs.Handle = reader["handle"]; Debug.Assert(fs.Handle != null); var arguments = Convert.ToInt32(reader["arguments"]); fs.Arguments = new List <TranslatedFSStringArgument>(arguments); if (arguments > 0) { while (reader.Read() && reader.NodeType != XmlNodeType.Element) { ; } if (reader.Name != "arguments") { throw new InvalidFormatException(String.Format("Expected <arguments>: {0}", reader.Name)); } int processedArgs = 0; while (processedArgs < arguments && reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name != "argument") { throw new InvalidFormatException(String.Format("Expected <argument>: {0}", reader.Name)); } var arg = new TranslatedFSStringArgument(); arg.Key = reader["key"]; arg.Value = reader["value"]; while (reader.Read() && reader.NodeType != XmlNodeType.Element) { ; } if (reader.Name != "string") { throw new InvalidFormatException(String.Format("Expected <string>: {0}", reader.Name)); } arg.String = new TranslatedFSString(); ReadTranslatedFSString(arg.String); fs.Arguments.Add(arg); processedArgs++; while (reader.Read() && reader.NodeType != XmlNodeType.EndElement) { ; } } } while (reader.Read() && reader.NodeType != XmlNodeType.EndElement) { ; } // Close outer element while (reader.Read() && reader.NodeType != XmlNodeType.EndElement) { ; } Debug.Assert(processedArgs == arguments); } }