相关疑难解决方法(0)

如何将C#匿名类型序列化为JSON字符串?

我正在尝试使用以下代码将匿名类型序列化为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

158
推荐指数
7
解决办法
11万
查看次数

如何将对象集合/字典序列化为<key> value </ key>

有没有办法将键/值对(最好是强类型,但也可能来自词典)序列化为下面所需的格式?

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)

因此,我们正在寻找代码示例,以了解如何以最佳方式获取我们想要的输出.

编辑:也许我应该更好地解释.我们已经知道如何序列化对象.我们正在寻找的是特定类型的序列化的答案......我将扩展上面的问题

.net c# xml serialization xml-serialization

13
推荐指数
2
解决办法
5239
查看次数

如何将匿名类型的对象序列化为XML?

有没有可能的方法将动态创建的对象序列化为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 xml json xml-serialization

6
推荐指数
1
解决办法
5477
查看次数

有没有办法使用 C# xml 序列化 .net 中的匿名类型

有没有办法在.net 中序列化匿名类型?正常的 XmlSerializer 会失败,因为该类型没有定义无参数构造函数;NetDataContractSeralizer 失败,因为我们无法将 DataContract 或 Serialized 属性标记为匿名类。

那么有什么聪明的办法或者我们就是做不到吗?

.net c# serialization anonymous-types

5
推荐指数
1
解决办法
3607
查看次数