gpt4 book ai didi

c# - 使用其属性序列化元素值

转载 作者:数据小太阳 更新时间:2023-10-29 03:01:05 26 4
gpt4 key购买 nike

我有一个以这种形式出现的 XML:

<run>
<foo status="1">111.9</foo>
<fred status="0">5.5</fred>
</run>

我想以下面的任何一种形式反序列化它(我还没有决定,希望答案能帮助我做出决定,尽管我更喜欢#1,因为设计美学和其他任何东西一样):

案例#1

[Serializable]
public class DataValue
{
[XmlAttribute("status")]
public int Status { get; set; }
// I need something here, but what?
public float Value { get; set; }
}
[Serializable]
[XmlRoot("run")]
public class DataBag
{
[XmlElement("foo")]
public DataValue Foo{ get; set; }
[XmlElement("fred")]
public DataValue Fred{ get; set; }
}

当我尝试这样做时,我得到的成员 foo 或 fred 的值为 0。

案例#2

[Serializable]
[XmlRoot("run")]
public class DataBag2
{
[XmlElement("foo")]
public float Foo{ get; set; }

[XmlElement("foo")]
[XmlAttribute("status")]
public int Foo_status { get; set; }

[XmlElement("fred")]
public float Fred{ get; set; }

[XmlElement("fred")]
[XmlAttribute("status")]
public int Fred_status { get; set; }
}

它编译但我在反射(reflect) Foo_status 时得到 InvalidOperationException,最里面的异常是“对于非数组类型,您可以使用以下属性:XmlAttribute、XmlText、XmlElement 或 XmlAnyElement。”

我该怎么做才能在案例 #1 中得到实际值,或者在案例 #2 中没有异常(以及有效值和状态)?

序列化代码如下:

// Case 1
using (var sr = new StreamReader("data.xml"))
{
var xs = new XmlSerializer(typeof(DataBag));
var run = (DataBag)xs.Deserialize(sr);
Console.WriteLine("Got a run: {0}-{1}", run.Fred.Value, run.Fred.Status);
// Issue here is that value is always 0, but status is accurate
}
// case 2
using (var sr = new StreamReader("data.xml"))
{
var xs = new XmlSerializer(typeof(DataBag2));// Exception here
var run = (DataBag2)xs.Deserialize(sr);
Console.WriteLine("Got a run: {0}-{1}", run.Foo, run.Foo_status);
}

感谢您的关注!

最佳答案

对于情况 1,您只需将其标记为 XMLText:

    [XmlText]
public float Value { get; set; }

关于c# - 使用其属性序列化元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37038566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com