Я уже решил одну проблему, но наткнулся на другую. Приведенный ниже код анализирует пространство имен со многими классами внутри и возвращает те, которые не связаны ни с какими другими. Поэтому, если у класса A есть 12 свойств, и одно из них, например,
public ClassB myProperty {get; set;}
, то выборка возвращает только класс A, а не класс B. Пока все хорошо. Однако у меня есть проблема, связывая классы через типы словаря. Например:
class Results
{
[JsonProperty ("jobcodes")]
public Dictionary<string, **jobcodes**> JobCodes { get; set; }
public Results()
{
}
}
class **jobcodes**
{
[JsonProperty ("_status_code")]
public int StatusCode { get; set; }
[JsonProperty ("_status_message")]
public string StatusMessage { get; set; }
[JsonProperty ("id")]
public string Id { get; set; }
public jobcodes ()
{ }
}
Так что, к сожалению, выбор вернет результаты класса * и коды заданий класса, и мне нужно исправить его, чтобы исключить * также свойства, которые являются словарями и ссылаются на другие связанные классы , Ниже кода:
string Library = "ConsoleApp1.Methods";
var classes = AppDomain.CurrentDomain.GetAssemblies ()
.SelectMany (t => t.GetTypes ())
.Where (t =>
t.IsClass &&
t.Namespace == Library &&
!t.IsNested)
.ToList ();
var properties = classes.SelectMany (
x => x.GetProperties (BindingFlags.Public | BindingFlags.Instance)
.Select (y => y.PropertyType));
foreach ( var method in classes.Where (x => !properties.Contains (x)).Select (x => x.Name) )
{
Console.WriteLine ("Reading: " + method);
}
(ПРИМЕЧАНИЕ: двойные звездочки мои, просто чтобы подчеркнуть, где соединение отсутствует, выбор отсутствует - спасибо).
Я пробовал, но не удалось, я не опытен в этом. Может ли кто-нибудь помочь мне, пожалуйста? Спасибо.