Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

ResXDataNode Class

Represents an element in an XML resource (.resx) file.


Namespace:  System.Resources
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)

[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
public sealed class ResXDataNode : ISerializable

The ResXDataNode type exposes the following members.

Public methodResXDataNode(String, Object)Initializes a new instance of the ResXDataNode class.
Public methodResXDataNode(String, ResXFileRef)Initializes a new instance of the ResXDataNode class with a reference to a resource file.
Public methodResXDataNode(String, Object, Func<Type, String>)Initializes a new instance of the ResXDataNode class.
Public methodResXDataNode(String, ResXFileRef, Func<Type, String>)Initializes a new instance of the ResXDataNode class with a reference to a resource file.

Public propertyCommentGets or sets an arbitrary comment regarding this resource.
Public propertyFileRefGets the file reference for this resource.
Public propertyNameGets or sets the name of this resource.

Public methodEquals(Object)Determines whether the specified object is equal to the current object. (Inherited from Object.)
Public methodGetHashCodeServes as the default hash function. (Inherited from Object.)
Public methodGetNodePositionRetrieves the position of the resource in the resource file.
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Public methodGetValue(AssemblyName[])Retrieves the object that is stored by this node by searching the specified assemblies.
Public methodGetValue(ITypeResolutionService)Retrieves the object that is stored by this node by using the specified type resolution service.
Public methodGetValueTypeName(AssemblyName[])Retrieves the type name for the value by examining the specified assemblies.
Public methodGetValueTypeName(ITypeResolutionService)Retrieves the type name for the value by using the specified type resolution service.
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)

Explicit interface implemetationPrivate methodISerializable.GetObjectDataInfrastructure. Populates a SerializationInfo object with the data needed to serialize the target object.

The ResXDataNode class supports the representation of rich data types within a resource file. It can support the storage of any object in a resource file, so long as the object supports serialization and type editors.

You can create a ResXDataNode object by calling one of its overloaded class constructors. You can then add the resource item or element to a resource file by calling the ResXResourceWriter.AddResource method.

To retrieve an existing ResXDataNode object, you must enumerate the ResXDataNode objects in an XML resource file by instantiating a ResXResourceReader object, setting the ResXResourceReader.UseResXDataNodes property to true, and calling the ResXResourceReader.GetEnumerator method to get an enumerator. The example provides an illustration.

The following example uses the ResXResourceReader.GetEnumerator method to obtain an IDictionaryEnumerator object that is used to enumerate the ResXDataNode objects in a .resx file. The example includes a CreateResourceFile routine that creates the necessary XML resource file.

using System;
using System.Collections;
using System.ComponentModel.Design;
using System.Resources;

public class Example
   private const string resxFilename = @".\CountryHeaders.resx";

   public static void Main()
      // Create a resource file to read.

      // Enumerate the resources in the file.
      ResXResourceReader rr = new ResXResourceReader(resxFilename);
      rr.UseResXDataNodes = true;
      IDictionaryEnumerator dict = rr.GetEnumerator();
      while (dict.MoveNext()) {
         ResXDataNode node = (ResXDataNode) dict.Value;
         Console.WriteLine("{0,-20} {1,-20} {2}", 
                           node.Name + ":", 
                           node.GetValue((ITypeResolutionService) null), 
                           ! String.IsNullOrEmpty(node.Comment) ? "// " + node.Comment : "");

   private static void CreateResourceFile()
      ResXResourceWriter rw = new ResXResourceWriter(resxFilename);
      string[] resNames = {"Country", "Population", "Area", 
                           "Capital", "LCity" };
      string[] columnHeaders = { "Country Name", "Population (2010}", 
                                 "Area", "Capital", "Largest City" };
      string[] comments = { "The localized country name", "Estimated population, 2010", 
                            "The area in square miles", "Capital city or chief administrative center", 
                            "The largest city based on 2010 data" };
      rw.AddResource("Title", "Country Information");
      rw.AddResource("nColumns", resNames.Length);
      for (int ctr = 0; ctr < resNames.Length; ctr++) {
         ResXDataNode node = new ResXDataNode(resNames[ctr], columnHeaders[ctr]);
         node.Comment = comments[ctr];
// The example displays the following output: 
//    Title:               Country Information 
//    nColumns:            5 
//    Country:             Country Name         // The localized country name 
//    Population:          Population (2010}    // Estimated population, 2010 
//    Area:                Area                 // The area in square miles 
//    Capital:             Capital              // Capital city or chief administrative center 
//    LCity:               Largest City         // The largest city based on 2010 data

Because the UseResXDataNodes property is true, the value of the IDictionaryEnumerator.Value property is a ResXDataNode object rather than the resource value. This makes a resource item's comment available from the ResXDataNode.Comment property.

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
© 2015 Microsoft