Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中向简单数据类型添加XML子元素_C#_.net_Xml_Xml Serialization - Fatal编程技术网

C# 如何在C中向简单数据类型添加XML子元素

C# 如何在C中向简单数据类型添加XML子元素,c#,.net,xml,xml-serialization,C#,.net,Xml,Xml Serialization,我试图将一个简单的数据类型序列化为XML,但要以一种特殊的方式满足现有的API。假设所需的XML必须以这种方式形成 以下是所需的XML: <foo> <value>derp</value> </foo> 我知道的唯一两个选择是 简单的序列化,这当然只会导致 创建一个Foo类,该类创建所需的XML,但强制用户键入 而不是更可取的 foo = "derp"; 有没有办法在类中包含简单字符串,但用子元素表示它?使用以下实现: [XmlRoot("foo

我试图将一个简单的数据类型序列化为XML,但要以一种特殊的方式满足现有的API。假设所需的XML必须以这种方式形成

以下是所需的XML:

<foo>
<value>derp</value>
</foo>
我知道的唯一两个选择是

简单的序列化,这当然只会导致 创建一个Foo类,该类创建所需的XML,但强制用户键入 而不是更可取的

foo = "derp";
有没有办法在类中包含简单字符串,但用子元素表示它?

使用以下实现:

[XmlRoot("foo")]
public class Foo
{
    [XmlElement("value")]
    public string Value { get; set; }

    public static implicit operator Foo(string s)
    {
        return new Foo { Value = s };
    }
}
用法:

private static void Main()
{
    Foo foo = "abc";

    var ns = new XmlSerializerNamespaces();
    ns.Add(string.Empty, string.Empty);

    var serialzier = new XmlSerializer(typeof(Foo));

    using (var writer = new StringWriter())
    {
        serialzier.Serialize(writer, foo, ns);

        Console.WriteLine(writer.ToString());
    }
}
输出:

<?xml version="1.0" encoding="utf-16"?>
<foo>
  <value>abc</value>
</foo>

使用此实现:

[XmlRoot("foo")]
public class Foo
{
    [XmlElement("value")]
    public string Value { get; set; }

    public static implicit operator Foo(string s)
    {
        return new Foo { Value = s };
    }
}
用法:

private static void Main()
{
    Foo foo = "abc";

    var ns = new XmlSerializerNamespaces();
    ns.Add(string.Empty, string.Empty);

    var serialzier = new XmlSerializer(typeof(Foo));

    using (var writer = new StringWriter())
    {
        serialzier.Serialize(writer, foo, ns);

        Console.WriteLine(writer.ToString());
    }
}
输出:

<?xml version="1.0" encoding="utf-16"?>
<foo>
  <value>abc</value>
</foo>

为什么要以这种方式序列化?为了满足现有API编辑的原始问题,您不能在包含foo的类上实现,以完全控制序列化?为什么要以这种方式序列化?为了满足现有API编辑的原始问题,您不能在包含foo的类上实现,完全控制序列化?