C#4.0引入了一种名为"dynamic"的新类型.这听起来不错,但程序员会用它做什么?
有没有可以节省一天的情况?
我正在尝试使用以下代码将匿名类型序列化为JSON:
var serializer = new DataContractJsonSerializer(thing.GetType());
var ms = new MemoryStream();
serializer.WriteObject(ms, thing);
var json = Encoding.Default.GetString(ms.ToArray());
Run Code Online (Sandbox Code Playgroud)
但是,执行此操作时会出现以下异常:
类型'<> f__AnonymousType1`3 [System.Int32,System.Int32,System.Object []]'无法序列化.请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员.有关其他受支持的类型,请参阅Microsoft .NET Framework文档.
我不能将属性应用于匿名类型(据我所知).有没有其他方法来进行此序列化或我错过了什么?
c# json anonymous-types json-serialization datacontractjsonserializer
我认为我的大脑中途包含了C#4中的动态类型概念,但在我的生活中无法找到我真正想要使用它的场景.
我确信有很多,但我只是无法建立连接,以便我能够设计出一个更好的解决方案,而不是接口,依赖注入等动态解决方案.
那么,动态类型使用是否恰当的实际应用场景是什么?
我需要得到:
public class Package
{
public Package()
{
name = "";
type = new List<Dictionary<string, string>>();
}
public string name { get; set; }
public List<Dictionary<string, string>> type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
成:
{
"name":"package_name",
"type":
{
"http://random.url.as.key":"random/value"
}
}
Run Code Online (Sandbox Code Playgroud)
有:
Package package = new Package();
package.name = "package_name";
package.type.Add(new Dictionary<string, string>() { { "http://random.url.as.key", "random/value" } });
Run Code Online (Sandbox Code Playgroud)
我明白了:
{
"name":"package_name",
"type":
[
[
{
"Key":"http:\/\/random.url.as.key",
"Value":"random\/value"
}
]
]
}
Run Code Online (Sandbox Code Playgroud)
同时,用:
var package = new
{
name = …Run Code Online (Sandbox Code Playgroud) 我在Web API项目中使用了一个Dictionary,它在JSON中进行序列化:
{"keyname":{objectvalue},"keyname2:"....
Run Code Online (Sandbox Code Playgroud)
由于我有重复的键,我不能再使用Dictionary类型了,而现在我正在使用它 List<KeyValuePair<string,object>>.
但这是序列化的方式:
[{"Key":"keyname","Value":"objectvalue"}...
Run Code Online (Sandbox Code Playgroud)
有没有办法让List<KeyValuePair>序列化与字典一样?
谢谢.
如果在调用方法时它们可能不存在,它们的用途是什么?
这是否意味着您可以在动态对象上动态创建方法?
这有什么实际用处?