0
我努力使根據我的課在下面的模式屬性文本編寫的:C#得到一個屬性是任何類型的列表
MyClass
ID 1
Name MyName
AnotherProperty SomeValue
ThisIsAnotherClass
AnotherClassProperties 1
//Example class
public class MyClass
{
public int ID { get; set; }
public string Name { get; set; }
public string AnotherProperty { get; set; }
public AnotherClass ThisIsAnotherClass { get; set; }
}
所以我採取每個屬性的名稱,它寫,一個空格,那麼它是價值(如果有的話)。 現在我想實現這樣的事情列表和任何類似數組的支持:
MyClass
ArrayTest
1
2
3
如果它是一個類,我將有功能的遞歸這樣我就可以顯示裏面的所有值列表/數組在這種模式。 (這是一個web服務)
我的問題是,我怎麼能找到一個特定的屬性是列表能夠?
我已經試過:在評論中提到
Type type = myObject.GetType();
PropertyInfo[] properties = type.GetProperties();
for(int i = 0; i < properties.Length; i++)
{
if(properties[i].PropertyType.IsGeneric) //Possible List/Collection/Dictionary
{
//Here is my issue
Type subType = properties[i].PropertyType.GetGenericTypeDefinition();
bool isAssignable = subType.IsAssignableFrom(typeof(ICollection<>)); //Always false
bool isSubclass = subType.IsSubclassOf(typeof(ICollection<>)); //Always false
//How can I figure if it inherits ICollection/IEnumerable so I can use it's interface to loop through it's elements?
}
else if(properties[i].PropertyType.IsArray) //Array
{
}
else if(properties[i].PropertyType.IsClass && !properties[i].PropertyType.Equals(typeof(String)))
{
//Non-string Subclasses, recursive here
}
else
{
//Value types, write the text + value
}
}
爲什麼不只是使用JSON,它已經有一個解析器,並沒有引入更多的噪音。 –
IsAssignableFrom幾乎總是與常識相反。你問是否可以從你的類型分配接口,而不是相反。 –
@DavinTryon我對JSON瞭解不多,但我不認爲你可以編輯它如何格式化數據的權利?在這種情況下,客戶希望以非常煩人/特定的方式接收數據,這就是爲什麼我要爲此做類。 – Danicco