public ResXDataNode(string name, ResXFileRef fileRef, Func <Type, string> typeNameConverter) { if (string.IsNullOrEmpty(name)) { throw new ArgumentNullException(nameof(name)); } this.name = name; this.fileRef = fileRef ?? throw new ArgumentNullException(nameof(fileRef)); this.typeNameConverter = typeNameConverter; }
/// <summary> /// Get the value contained in this datanode /// </summary> public object GetValue(ITypeResolutionService typeResolver) { if (value != null) { return(value); } object result = null; if (FileRefFullPath != null) { Type objectType = ResolveType(FileRefType, typeResolver); if (objectType != null) { // we have the FQN for this type fileRef = FileRefTextEncoding != null ? new ResXFileRef(FileRefFullPath, FileRefType, Encoding.GetEncoding(FileRefTextEncoding)) : new ResXFileRef(FileRefFullPath, FileRefType); TypeConverter tc = TypeDescriptor.GetConverter(typeof(ResXFileRef)); result = tc.ConvertFrom(fileRef.ToString()); } else { string newMessage = string.Format(SR.TypeLoadExceptionShort, FileRefType); TypeLoadException newTle = new TypeLoadException(newMessage); throw (newTle); } } else if (nodeInfo.ValueData != null) { // it's embedded, we deserialize it result = GenerateObjectFromDataNodeInfo(nodeInfo, typeResolver); } else { // schema is wrong and say minOccur for Value is 0, // but it's too late to change it... // we need to return null here return(null); } return(result); }
/// <summary> /// Adds a string resource to the resources. /// </summary> public void AddResource(ResXDataNode node) { // we're modifying the node as we're adding it to the resxwriter // this is BAD, so we clone it. adding it to a writer doesnt change it // we're messing with a copy ResXDataNode nodeClone = node.DeepClone(); ResXFileRef fileRef = nodeClone.FileRef; string modifiedBasePath = BasePath; if (!string.IsNullOrEmpty(modifiedBasePath)) { if (!modifiedBasePath.EndsWith("\\")) { modifiedBasePath += "\\"; } fileRef?.MakeFilePathRelative(modifiedBasePath); } DataNodeInfo info = nodeClone.GetDataNodeInfo(); AddDataRow(DataStr, info.Name, info.ValueData, info.TypeName, info.MimeType, info.Comment); }
public ResXDataNode(string name, ResXFileRef fileRef) : this(name, fileRef, null) { }