Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将匿名类型反序列化为动态_C#_Json_Ravendb_Expando - Fatal编程技术网

C# 将匿名类型反序列化为动态

C# 将匿名类型反序列化为动态,c#,json,ravendb,expando,C#,Json,Ravendb,Expando,我有一个应用程序,其中包含一个称为“任务”的业务实体。该实体有一组固定的属性,但也可以作为expando 因此,其模式如下所示: namespace RavenResearch { public class Task { public Guid TaskId { get; set; } public DateTime CreatedDate { get; set; } public dynamic DynamicProperties

我有一个应用程序,其中包含一个称为“任务”的业务实体。该实体有一组固定的属性,但也可以作为expando

因此,其模式如下所示:

namespace RavenResearch
{
    public class Task
    {
        public Guid TaskId { get; set; }
        public DateTime CreatedDate { get; set; }
        public dynamic DynamicProperties { get; set; }
    }
}
public class Task
{
    public Guid TaskId { get; set; }
    public DateTime CreatedDate { get; set; }
    public Dictionary<string, SimpleValue> DynamicProperties { get; set; }
}

public abstract class SimpleValue
{

}

public class SimpleValue<T> : SimpleValue
{
    public T Value
    { get; set; }

    public SimpleValue(T value)
    {
        this.Value = value;
    }
}
当它存储在RavenDB中时,看起来是这样的

{
  "TaskId": "9cac592f-98ec-4fda-a823-e5402736078e",
  "CreatedDate": "2011-09-22T10:25:35.2701544+12:00",
  "DynamicProperties": {
    "$type": "<>f__AnonymousType0`2[[System.Int32, mscorlib],[System.String, mscorlib]], RavenResearch",
    "MatterNumber": 0,
    "CustomerNumber": "37"
  }
}
@雅各布:如果我使用字典,我会丢失关于动态属性的所有类型信息-但是,我可以这样做:

namespace RavenResearch
{
    public class Task
    {
        public Guid TaskId { get; set; }
        public DateTime CreatedDate { get; set; }
        public dynamic DynamicProperties { get; set; }
    }
}
public class Task
{
    public Guid TaskId { get; set; }
    public DateTime CreatedDate { get; set; }
    public Dictionary<string, SimpleValue> DynamicProperties { get; set; }
}

public abstract class SimpleValue
{

}

public class SimpleValue<T> : SimpleValue
{
    public T Value
    { get; set; }

    public SimpleValue(T value)
    {
        this.Value = value;
    }
}
公共类任务
{
公共Guid TaskId{get;set;}
公共日期时间CreatedDate{get;set;}
公共字典动态属性{get;set;}
}
公共抽象类SimpleValue
{
}
公共类SimpleValue:SimpleValue
{
公共价值
{get;set;}
公共SimpleValue(T值)
{
这个。值=值;
}
}

在这种情况下,最好避免使用
动态
。如果改用
字典
,创建
任务
不会太可怕:

new RavenResearch.Task {
    TaskId = Guid.NewGuid(),
    CreatedDate = DateTime.Now,
    DynamicProperties = new Dictionary<string, object> {
        { "MatterNumber", 0 },
        { "CustomerNumber", "37" } 
    }
}
新RavenResearch.Task{
TaskId=Guid.NewGuid(),
CreatedDate=DateTime。现在,
DynamicProperties=新字典{
{“MatterNumber”,0},
{“客户编号”,“37”}
}
}

在这种情况下,最好避免使用
动态
。如果改用
字典
,创建
任务
不会太可怕:

new RavenResearch.Task {
    TaskId = Guid.NewGuid(),
    CreatedDate = DateTime.Now,
    DynamicProperties = new Dictionary<string, object> {
        { "MatterNumber", 0 },
        { "CustomerNumber", "37" } 
    }
}
新RavenResearch.Task{
TaskId=Guid.NewGuid(),
CreatedDate=DateTime。现在,
DynamicProperties=新字典{
{“MatterNumber”,0},
{“客户编号”,“37”}
}
}

请记住,在运行时,动态只是一个对象,我们无法知道您的实际意思。
您最好在那里使用RavenJObject。这将是处理动态数据的一种更自然的方式,它将保留类型信息

请记住,在运行时,动态只是对象,我们无法知道您在这里的实际含义。
您最好在那里使用RavenJObject。这将是处理动态数据的一种更自然的方式,它将保留类型信息

True,但是我会丢失有关MatterNumber和Customer number的所有类型信息。它们仍然是int和string。True,但是我会丢失有关MatterNumber和Customer number的所有类型信息。它们仍然是int和string。