我试图从XML文件中读取字体(我自己的,由特殊类定义)。
有趣的是我可以读取数字并将它们解析为int,甚至可以获得十六进制值," chop"它在三个或部分上获得ARGB值,但我无法做到最简单的部分:)
我的xml阅读器不想将值设置为字符串:
myFont.name = xReader.Value.ToString();
myFont.name
的价值我总是空着,即使我试图将其剁成单个字符并逐个添加到myFont.name
字符串(我绝望的决定)
但是,正如我所说,我可以使用相同的方式读取int值:
myFont.size = int.Parse(xReader.Value.ToString());
//returns correct value for the size
我也可以在控制台窗口中显示它:
Console.Writeline(xReader.Value); //returns correct string
myFont.name=xReader.Value;
Console.Writeline(myFont.name.ToString()); //returns empty string
有什么想法吗?
编辑: 字体类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication6.entities
{
public class PDFFont
{
public int size { get; set; }
public int ColorR { get; set; }
public int ColorG { get; set; }
public int ColorB { get; set; }
public int ColorA { get; set; }
public string name { get; set; }
}
}
EDIT2: 开关箱结构:
while (Xread.MoveToNextAttribute())
{
entities.PDFFont newFont = new entities.PDFFont();
switch (Xread.Name)
{
case "name":
newFont.name = Xread.Value.ToString();
//returns null
break;
case "size": newFont.size = int.Parse(Xread.Value.ToString()); break;
//returns null, however before I create method below worked ok
case "color":
colorCreator nColor = new colorCreator(Xread.Value);
newFont.ColorR = nColor.R;
newFont.ColorG = nColor.G;
newFont.ColorB = nColor.B;
newFont.ColorA = nColor.A;
//works perfectly, values are transfer corectly
break;
}
我还尝试在交换机外壳结构外部设置此值,在另一个对象上运行。所以上面写的部分有问题。 我刚刚把console.writeline("听到了!");在newFont.name = xRead.Value和break之间,它显示自己。所以我知道那个案例" name"在我的xml文件中找到。
答案 0 :(得分:0)
可能你正在某处清除name属性的内容。放一个断点,一步一步走。
答案 1 :(得分:0)
我无法做任何有创意的事情,所以我决定重建这个建筑。感谢MoveToAttribute(string)方法。
try
{
Xread.MoveToAttribute("name");
newFont.name = Xread.Value.ToString();
}
catch { newFont.name = "default"; }
try
{
Xread.MoveToAttribute("size");
newFont.size = int.Parse(Xread.Value.ToString());
}
catch { newFont.size = 12; }
try
{
Xread.MoveToAttribute("color");
colorCreator nColor = new colorCreator(Xread.Value);
newFont.ColorR = nColor.R;
newFont.ColorG = nColor.G;
newFont.ColorB = nColor.B;
newFont.ColorA = nColor.A;
}
catch {
newFont.ColorR = 0;
newFont.ColorG = 0;
newFont.ColorB = 0;
newFont.ColorA = 255;
}