Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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#UniqueId类XML反序列化_C#_Xml_Deserialization - Fatal编程技术网

C#UniqueId类XML反序列化

C#UniqueId类XML反序列化,c#,xml,deserialization,C#,Xml,Deserialization,我正在尝试从XML文件反序列化urn:uuid:a0a32a4f-9687-46ef-bdc7-e4ab049ac56f。我的文件样本是 比利 urn:uuid:a0a32a4f-9687-46ef-bdc7-e4ab049ac56f 我正在尝试反序列化到下面的类中 公共类文档 { 公共字符串名称{get;set;} 公共唯一ID TheId{get;set;} } 我的完整演示代码: [可序列化] 公共类文档 { 公共字符串名称{get;set;} 公共唯一ID TheId{get;se

我正在尝试从XML文件反序列化
urn:uuid:a0a32a4f-9687-46ef-bdc7-e4ab049ac56f
。我的文件样本是


比利
urn:uuid:a0a32a4f-9687-46ef-bdc7-e4ab049ac56f
我正在尝试反序列化到下面的类中

公共类文档
{
公共字符串名称{get;set;}
公共唯一ID TheId{get;set;}
}
我的完整演示代码:

[可序列化]
公共类文档
{
公共字符串名称{get;set;}
公共唯一ID TheId{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
字符串Xml=@“
比利
urn:uuid:a0a32a4f-9687-46ef-bdc7-e4ab049ac56f
";
XmlReader=XmlReader.Create(新的StringReader(Xml));
XmlSerializer serializer=新的XmlSerializer(typeof(Document));
文档文档=(文档)序列化程序。反序列化(读取器);
WriteLine(“名称为:{0}”,doc.Name);
WriteLine(“Id是:{0}”,doc.TheId);
Console.ReadKey();
}
}
但每次我都会得到新的uniquid,而不是存储在XML文档中的值

我做错了什么

UPD:
UniqueId
类位于System.Runtime.Serialization程序集中

我的最终目标是将此值放入
Guid
,我想这是使用
UniqueId::TryGetGuid
简单解决方案:

public class Document
{
    public string Name { get; set; }

    [EditorBrowsable(EditorBrowsableState.Never)]
    [XmlElement("TheId")]
    public string TheIdString { get => TheId.ToString(); set => TheId = new UniqueId(value); }

    [XmlIgnore]
    public UniqueId TheId { get; set; }
}
添加一个不同的
string
属性,该属性将被序列化/反序列化,并使其支持的“field”成为
唯一的id
(我认为这是适配器模式,但不确定)

通过查看的源代码,我看不到对
XmlSerializer
的特殊处理,比如
IXmlSerializable
接口。也没有任何文档说明它与
XmlSerializer
兼容


啊。。。
[EditorBrowsable(EditorBrowsableState.Never)]
是这样的,Intellisense不会建议您使用
uniqueIdImpl
属性。

它位于
System.Runtime.Serialization
程序集中。这会导致问题吗?@xanatos-我可以复制这个(核心2.0)。顺便说一下,这是一个很好的mcve问题。我很惊讶,您会期望
System.Xml
中的类型是XmlSerizalizable。但它也不会写。@xanatos:Hmmm。。。。我仍然可以用4.7.1重现这个问题……谢谢,我在提出问题之前已经考虑过这个解决方案。你的执行比我的更整洁。但我真的很好奇,
UniqueId
类为什么会发生这种情况@AleksandrGorbach它是由
XmlReader
支持的,但可能他们(微软程序员)从未想过在
XmlSerializer
中直接支持它,如果没有
XmlSerializer
的直接支持,
UniqueId
将需要“手动”支持,而这应该由
UniqueId
实现。没有这种支持。