相关疑难解决方法(0)

当从List <>继承类时,XmlSerializer不会序列化其他属性

我在这里有一个情况,我需要继承自己的类List<ItemType>,但是当我这样做时,XmlSerializer不会序列化我的类中声明的任何属性或字段,以下示例演示:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        DoSerialize();
    }
    private void DoSerialize()
    {
        MyClass obj = new MyClass();
        obj.Add(1);
        obj.Add(2);
        obj.Add(3);
        XmlSerializer s = new XmlSerializer(typeof(MyClass));
        StringWriter sw = new StringWriter();
        s.Serialize(sw, obj);
    }
}
[Serializable]
[XmlRoot]
public class MyClass : List<int>
{
    public MyClass()
    {
    }
    int myAttribute = 2011;
    [XmlAttribute]
    public int MyAttribute
    {
        get
        {
            return myAttribute;
        }
        set
        {
            myAttribute = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果XML:

<?xml version="1.0" encoding="utf-16"?> …
Run Code Online (Sandbox Code Playgroud)

.net c# ienumerable list xml-serialization

19
推荐指数
2
解决办法
5758
查看次数

实现IList接口

我是仿制药的新手.我想通过从IList<T>接口派生它来实现我自己的集合.

能否请您提供一些实现IList<T>接口的类的链接,或者为我提供至少实现AddRemove方法的代码?

c# generics collections ilist

12
推荐指数
3
解决办法
4万
查看次数

WinForms数据绑定

我是数据绑定的新手.

我有这些课程:

public class Foo : List<Bar>
{
    public string FooName { get; set; }
}

public class Bar
{
    public string BarName { get; set; }
    public string BarDesc { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个 List<Foo>

我想要有Foo物品ComboBoxBar物品ListBox.当我更改所选项目时ComboBox,我想要ListBox更改.当我更改所选项目时,ListBox我想TextBox填写BarDesc.

下面只对作品ListBoxComboBox:

comboBox1.DataSource = foos;
comboBox1.DisplayMember = "FooName";
listBox1.DataBindings.Add("DataSource", foos, "");
listBox1.DisplayMember = "BarName";
Run Code Online (Sandbox Code Playgroud)

我现在不如何绑定选择做BarListBoxTextBox.Text财产.也许添加绑定 …

c# data-binding winforms

12
推荐指数
1
解决办法
2万
查看次数

C#集合类 - 是或否

我是C#的相对新手,虽然我是一名称职的程序员,但我承认我对编写自定义集合类是否是一个好主意感到困惑.很多人似乎都说"不要",但在C#中有一整套基类.

这是我的具体案例.我有一个时间表申请.作为其中的一部分,我有一个服务类,服务类包含服务y的集合,例如路由链接.路由链接本身就是一个自定义类:

public class Service
{
  public RouteLinks RL;    // A collection of RouteLink types
  ...
}

public class RouteLink
{
    public string FirstStopRef;
    public string LastStopRef;
    public Tracks RouteTrack;    // Another collection, this time of Track types
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经看过使用Dictionary作为RouteLinks的类型,因为我需要能够引用它们.原则上这很好.但是,将RouteLink添加到RouteLinks集合的过程包括检查它是否已经存在,或者它是否已扩展和现有的路由链接,或者......为此,我需要一个自定义的添加功能.

那么为什么创建自定义集合类会有这么糟糕的做法呢?为什么我不应该继承CollectionBase或DictionaryBase?

我或许应该补充一点,我从VBA传输此代码[请不要拍我:)]我必须实现自定义集合.

c# collections class

11
推荐指数
1
解决办法
300
查看次数

上课时收藏

当一个类必须具有某种对象的容器(集合)时,有几种选择,我想知道我会更喜欢哪种实现。

这里遵循我发现的选项:

public class AClass : IEnumerable<string>{
   private List<string> values = new List<string>()

   IEnumerator IEnumerable.GetEnumerator()
   {
      return GetEnumerator();
   }

   public IEnumerator<T> GetEnumerator(){
      return values.GetEnumerator();
   }
}
Run Code Online (Sandbox Code Playgroud)

优点:AClass不依赖于集合的具体实现(在这种情况下为List)。

缺点:AClass没有添加和删除元素的接口

public class AClass : ICollection<string>{
   private List<string> values = new List<string>()

   IEnumerator IEnumerable.GetEnumerator()
   {
      return GetEnumerator();
   }

   public IEnumerator<T> GetEnumerator(){
      return values.GetEnumerator();
   }

   //other ICollectionMembers
}
Run Code Online (Sandbox Code Playgroud)

优点:与IEnumerable相同,并且具有用于添加和删除元素的界面

缺点:ICollection接口定义了其他人很少使用的方法,仅出于接口的目的而实现这些方法就很无聊。IEnumerable LINQ扩展也可以解决其中一些问题。

public class AClass : List<string>{

}
Run Code Online (Sandbox Code Playgroud)

优点:无需执行任何方法。调用方可以调用List实现的任何方法

缺点:AClass依赖于集合列表,如果更改,则可能需要更改某些调用者代码。同样,AClass不能继承任何其他类。

问题是:我更愿意声明我的班级包含一个同时支持添加和删除操作的集合?或其他建议...

c# collections

7
推荐指数
1
解决办法
292
查看次数

当对象从列表继承时序列化对象

[DataContract]
public class A : List<B>
{
    [DataMember]
    public double TestA { get; set; }
}

[DataContract]
public class B
{
    [DataMember]
    public double TestB { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用上面的模型,我尝试序列化以下对象:

List<A> list = new List<A>()
{
    new A() { TestA = 1 },
    new A() { TestA = 3 }
};

json = JsonConvert.SerializeObject(list);
//json: [[],[]]
Run Code Online (Sandbox Code Playgroud)

我的两个价值来自TestA哪里?这可能是从这个线程(XML)重复,但我想知道是否没有选项通过设置一些JSON序列化选项来包含这些值?

注意:List<B>在类中创建属性A而不是继承对我来说是没有选择的.

c# inheritance serialization json

5
推荐指数
1
解决办法
580
查看次数

使用继承自 List&lt;T&gt; 的类进行 JSON 序列化

我有一个类继承List<T>并添加了一个类属性

public class DrivenList : List<int>
{
    public string Name {get;set;}

    private DrivenList() { }

    public DrivenList(string name) { this.Nname = name; }
}
Run Code Online (Sandbox Code Playgroud)

当使用 Newtonsoft.Json JSON 序列化对象时,我仅获得列表项。([1,2,3])

有什么想法如何将Name属性添加到结果中吗?

解决:通过将此属性添加到列表中

[JsonObject(MemberSerialization = MemberSerialization.Fields)]
public class DrivenList : List<int>
Run Code Online (Sandbox Code Playgroud)

c# json

5
推荐指数
1
解决办法
2856
查看次数

如何将List转换为继承自List <T>的类型?

我有两节课:

public class Row : Dictionary<string,string> {}
public class Table : List<Row> {}
Run Code Online (Sandbox Code Playgroud)

在应该返回Table类型的对象的方法中,我尝试使用Where -Statement过滤Table类型的对象,并在过滤后返回此对象.

Table table = new Table();
table = tableObject.Where(x => x.Value.Equals("")).ToList();
return table;
Run Code Online (Sandbox Code Playgroud)

我的问题是生成的IEnumerable的演员表.

  1. 使用(Table)转换会抛出InvalidCastException

附加信息:无法将'System.Collections.Generic.List`1 [Row]'类型的对象强制转换为'Table'类型.

  1. 使用as转换会导致null对象

如何从IEnumerable中返回Table类型的对象?

c# linq casting

5
推荐指数
1
解决办法
110
查看次数

为什么在这种情况下类型推断不起作用?

假设我有一个POCO和一个List类:

class MyClass
{...}

class MyClasses : List<MyClass> 
{...}
Run Code Online (Sandbox Code Playgroud)

和以下方法将映射IEnumerable<MyClass>MyClasses列表:

public static TListType ToListOfType<TListType, TItemType>(this IEnumerable<TItemType> list) where TListType : IList<TItemType>, new()
{
    var ret = new TListType();

    foreach (var item in list)
    {
        ret.Add(item);
    }

    return ret;
}
Run Code Online (Sandbox Code Playgroud)

我希望此代码可以编译,但不会:

var list = someListOfMyClass.ToListOfType<MyClasses>();
Run Code Online (Sandbox Code Playgroud)

但是我得到了

错误CS1061'IEnumerable'不包含'ToListOfType'的定义,并且找不到可访问的扩展方法'ToListOfType'接受类型为'IEnumerable'的第一个参数(您是否缺少using指令或程序集引用?)

但是,这确实有效:

var list = someListOfMyClass.ToListOfType<MyClasses, MyClass>();
Run Code Online (Sandbox Code Playgroud)

我不明白为什么类型推断不足以使编译器知道项目类型是什么,因为this变量是已知类型的列表。

c#

4
推荐指数
1
解决办法
70
查看次数

JSON序列化类继承列表的属性

我有一个模型如下:

public class TestResultModel
{
    public bool Successful { get; set; }
    public string ErrorMessage { get; set; }
}

public class TestResultListModel : List<TestResultModel>
{
    public int TotalTestCases { get { return base.Count; } }

    public int TotalSuccessful { get { return base.FindAll(t => t.Successful).Count; } }
}
Run Code Online (Sandbox Code Playgroud)

TestResultListModel从以下地址返回ApiController:

var testResultListModel = new TestResultListModel();
foreach (var testCaseId in new int[] {1,2,3,4})
{
    var testResultModel = new TestResultModel
    {
        Successful = true,
        ErrorMessage = "STRING"
    }; …
Run Code Online (Sandbox Code Playgroud)

c# json json.net asp.net-web-api

3
推荐指数
1
解决办法
1633
查看次数