我正在尝试使用以下代码将匿名类型序列化为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
有没有办法将键/值对(最好是强类型,但也可能来自词典)序列化为下面所需的格式?
public List<Identifier> Identifiers = new List<Identifiers>();
public class Identifier
{
public string Name { get; set; }
public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这通常序列化为以下内容:
<Identifiers>
<Identifier>
<Name>somename</Name>
<Description>somedescription</Description>
</Identifier>
<Identifier>
...
</Identifier>
</Identifiers>
Run Code Online (Sandbox Code Playgroud)
我们考虑的另一种可能的方法是使用哈希表/字典:
public Dictionary<string, string> Identifiers = new Dictionary<string,string>
{
{ "somename", "somedescription"},
{ "anothername", "anotherdescription" }
};
Run Code Online (Sandbox Code Playgroud)
但这将要求自定义序列化词典或自定义XmlWriter.
我们想要实现的输出是:
<Identifiers>
<somename>somedescription</somename>
<anothername>anotherdescription</anothername>
</Identifiers>
Run Code Online (Sandbox Code Playgroud)
因此,我们正在寻找代码示例,以了解如何以最佳方式获取我们想要的输出.
编辑:也许我应该更好地解释.我们已经知道如何序列化对象.我们正在寻找的是特定类型的序列化的答案......我将扩展上面的问题
有没有可能的方法将动态创建的对象序列化为xml字符串?
var foobar = new { foo = "bar" };
string xml = ConvertToXMLString(foobar);
//xml should be something like :
//<foo>bar</foo>
Run Code Online (Sandbox Code Playgroud)
我能够看一下XMLSerializer和DataContractSerializer,但XMLSerializer需要对象类型,而DataContractSerializer需要属性需要序列化.
出于绝望,我首先将对象转换为JSON,然后从JSON将其转换为XML.
var foobar = new { foo = "bar" };
JavaScriptSerializer js = new JavaScriptSerializer();
jsonString = js.Serialize(values);
//Json.NET at http://json.codeplex.com/
XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(jsonString);
Run Code Online (Sandbox Code Playgroud) 有没有办法在.net 中序列化匿名类型?正常的 XmlSerializer 会失败,因为该类型没有定义无参数构造函数;NetDataContractSeralizer 失败,因为我们无法将 DataContract 或 Serialized 属性标记为匿名类。
那么有什么聪明的办法或者我们就是做不到吗?