Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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# 文化与LINQ到XML_C#_.net_Internationalization_Linq To Xml - Fatal编程技术网

C# 文化与LINQ到XML

C# 文化与LINQ到XML,c#,.net,internationalization,linq-to-xml,C#,.net,Internationalization,Linq To Xml,对于序列化基本类型,LINQ to XML使用不变区域性,但是如果我有一个类似以下的类: class C { public double Value { get; set; } public override string ToString() { return Value.ToString(CultureInfo.CurrentCulture); } public string ToString(IFormatProvider pro

对于序列化基本类型,LINQ to XML使用不变区域性,但是如果我有一个类似以下的类:

class C
{
    public double Value { get; set; }

    public override string ToString()
    {
        return Value.ToString(CultureInfo.CurrentCulture);
    }

    public string ToString(IFormatProvider provider)
    {
        return Value.ToString(provider);
    }
}
并将
C
的实例作为内容传递给
XElement

new XElement("name", new C { Value = 5.1 });
调用基本的
.ToString()
,而不是
.ToString(CultureInfo.InvariantCulture)
。这似乎是内置类型和用户定义类的行为之间的异常


有没有办法让LINQ to XML使用用户定义类的不变区域性?

一种解决方案是实现
IXmlSerializable
,如下所示:

class C : IXmlSerializable {
    public double Value { get; set; }

    public override string ToString() {
        return Value.ToString(CultureInfo.CurrentCulture);
    }

    public string ToString(IFormatProvider provider) {
        return Value.ToString(provider);
    }

    public XmlSchema GetSchema() {
        throw new NotImplementedException();
    }

    public void ReadXml(XmlReader reader) {
        throw new NotImplementedException();
    }

    public void WriteXml(XmlWriter writer) {
        writer.WriteElementString("Value", Convert.ToString(Value, CultureInfo.CurrentCulture.NumberFormat));
    }
}

通过查看,我们可以看到将调用
(string)内容
。@FarhadJabiyev如果我不定义到string的转换,我看不出这是如何工作的?但是有什么问题吗?我看到
ToString
GetStringValue
中被调用,所以如果您在类中重写它,您可以在其中使用任何您想要的区域性。是否要将区域性全局设置为不必重写
ToString
?我已经尝试过了,似乎从未调用过WriteXml-对象将完全像以前一样序列化。