尝试将对象序列化为XML时遇到了一些问题.尝试序列化"配置文件"属性时出现问题,该属性是配置文件项列表.个人资料是我自己的类型.理想情况下,配置文件类型应该是抽象的,但事实并非如此,因为XML序列化需要无参数的ctor."个人档案"属性包含"IncomeProfile","CostProfile","InvestmentProfile"等类型的项目,这些项目当然都继承自"个人档案".
正如我所读到的那样,序列化它本身不受支持,因为XmlIncludeAttribute只允许一个继承类型.即
[XmlInclude(typeof(IncomeProfile))]
public List<Profile> Profiles { get; set; }
Run Code Online (Sandbox Code Playgroud)
解决这个问题时最好的做法是什么?我尝试过使用IXmlSerializable和反射的不同解决方案,但我似乎无法将每个配置文件反序列化为正确的类型(它们最终都使用Profile类型的ReadXml(XmlReader reader)方法,即使Visual Studio调试器说对象的类型是"IncomeProfile"或"CostProfile".这是我当前的反序列化代码,它将xml反序列化为三个Profile对象,而不是两个IncomeProfile和一个CostProfile:
while(reader.MoveToContent() == XmlNodeType.Element && reader.LocalName == "Profile")
{
String type = reader["Type"];
var project = (Profile)Activator.CreateInstance(Type.GetType(type));
project.ReadXml(reader);
reader.Read();
this.Profiles.Add(p2);
}
Run Code Online (Sandbox Code Playgroud)
非常感谢任何想法或建议!
我有一个简单的对象,允许您分配三个属性(x,y,z)(让我们称这个对象为"点",因为它就是这样).然后我有一个第二个对象,其中一个方法接受第一个对象的两个实例,并返回三维空间中两个"点"之间的距离.我还需要一个接受两个"点"和一个double的方法,表示行进的距离(从使用的第一个"点"参数)返回带有x,y,z坐标的"点"对象.
除了计算所提供的两个点之间的原始线上的点坐标,即距离第一个点一定距离之外,我对所有事情都很满意.
"点"对象:
public class POR
{
private double PORX;
private double PORY;
private double PORZ;
public double X
{
get { return PORX; }
set { PORX = value; }
}
public double Y
{
get { return PORY; }
set { PORY = value; }
}
public double Z
{
get { return PORZ; }
set { PORZ = value; }
}
public POR(double X, double Y, double Z)
{
PORX = X;
PORY = Y;
PORZ = …
Run Code Online (Sandbox Code Playgroud) 这两者之间有什么区别,何时应该使用RegisterAttached()而不是.Register()?
我最近阅读了以下溢出帖子: C#的隐藏功能
其中一个特征是arglist.为什么选择这个或替代方法作为对方法使用可变长度参数列表的方法?另外,请注意我可能不会在我的代码中使用这种构造,除非有必要这样做.这更像是一个语义问题,而不是甚至使用可变长度参数是否实际或谨慎.那么有谁知道哪个更好,为什么?
[Test]
public void CanHandleVariableLengthArgs()
{
TakeVariableLengthArgs(__arglist(new StringBuilder(), 12));
object[] arr = { new StringBuilder() };
TakeVariableLengthArgs2(arr);
TakeVariableLengthArgs3(
new Dictionary<string, object>
{ { "key", new StringBuilder() } });
}
public void TakeVariableLengthArgs(__arglist)
{
var args = new ArgIterator(__arglist);
var a = (StringBuilder)TypedReference.ToObject(args.GetNextArg());
a.Append(1);
}
public void TakeVariableLengthArgs2(params object[] args)
{
var a = (StringBuilder)args[0];
a.Append(1);
}
public void TakeVariableLengthArgs3(Dictionary<string, object> args)
{
var a = (StringBuilder)args["StringBuilder"];
a.Append(1);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个扩展方法,将数据插入到字典字典中,如下所示:
items=Dictionary<long,Dictionary<int,SomeType>>()
Run Code Online (Sandbox Code Playgroud)
到目前为止我所拥有的是:
public static void LeafDictionaryAdd<TKEY1,TKEY2,TVALUE>(this IDictionary<TKEY1,IDictionary<TKEY2,TVALUE>> dict,TKEY1 key1,TKEY2 key2,TVALUE value)
{
var leafDictionary =
dict.ContainsKey(key1)
? dict[key1]
: (dict[key1] = new Dictionary<TKEY2, TVALUE>());
leafDictionary.Add(key2,value);
}
Run Code Online (Sandbox Code Playgroud)
但编译器不喜欢它.该声明:
items.LeafDictionaryAdd(longKey, intKey, someTypeValue);
Run Code Online (Sandbox Code Playgroud)
给我一个类型推断错误.
声明:
items.LeafDictionaryAdd<long, int, SomeType>(longKey, intKey, someTypeValue);
Run Code Online (Sandbox Code Playgroud)
我得到"...不包含...的定义,最好的扩展方法重载有一些无效的参数.
我究竟做错了什么?
我从WebSPhere MQ队列收到消息.我尝试处理,如果我收到一些异常,我想将消息回滚到MQ队列.
我也没有遇到任何问题.消息会怎么样?它是否排在队列的底部?
如果我尝试从队列中拉出一条消息,我会收到相同的消息,我回滚了吗?
可能是什么行为?我想通常在高容量队列场景中知道这种行为?
感谢任何输入.
谢谢,Manglu
我需要在我们的Sql Server 2000数据库中散列(MD5)所有密码.我可以轻松地生成一个C#/ VB.NET程序来转换(哈希)所有密码,但我想知道(更多的是我的教育而不是真正迫切需要),如果有可能直接在T-SQL中计算MD5哈希.
感谢任何愿意回答的人.
使用C++在Microsoft Windows上生成唯一硬件ID的最佳方法是什么,这种方法不易被欺骗(例如更改MAC地址)?
我试图用asp.net mvc重新选择列表框中的项目
Html.ListBox("SupplierId",
new SelectList(Model.Suppliers, "Id", "Name", Model.SelectedSuppliers))
Run Code Online (Sandbox Code Playgroud)
这是viewdata
var viewData = new ViewData.SubstrateEditViewData(
new DataAccess.SubstrateRepository().GetItemById(id),
new DataAccess.SupplierRepository().GetItems(),
new DataAccess.SupplierSubstrateRepository().GetItems().Where(s => s.SubstrateId ==id).Select(s => s.Supplier));
Run Code Online (Sandbox Code Playgroud)
由于某种原因,即使我看到包含两个Supplier对象的Model.SelectedSupplier,它也没有选择项目.
谢谢
我正在使用jquery ui tabs小部件.我没有使用jquery主题,因为我更喜欢做我自己的CSS和东西.我有它的工作,但我想要的是当单击一个不同的选项卡时,选项卡内容具有不同的动画效果.我想要的是从左侧滑入新标签内容.
目前我有:
$("#tabs").tabs({ fx: {slide: 'slow' } }); });
Run Code Online (Sandbox Code Playgroud)
我知道上面的代码只是滑动而不是向左滑动,但它甚至没有滑动!我已下载幻灯片效果作为我的自定义ui下载的一部分.我不知道为什么它不起作用!这是我缺少的一些CSS吗?!我不知道!!!
c# ×4
.net ×1
3d ×1
asp.net-mvc ×1
c#-2.0 ×1
c#-3.0 ×1
c++ ×1
dictionary ×1
hash ×1
high-volume ×1
ibm-mq ×1
jquery-ui ×1
listbox ×1
math ×1
md5 ×1
sql-server ×1
t-sql ×1
transactions ×1
unique ×1
uuid ×1
windows ×1
wpf ×1