相关疑难解决方法(0)

多次处理对象

我有以下代码,它使用流打开和修改 Open XML 文档,然后保存该流的新二进制表示:

MemoryStream stream = null;
try
{
    stream = new MemoryStream();
    stream.Write(this.GetBinaryRepresentation(), 0, this.GetBinaryRepresentation().Length);

    using (WordprocessingDocument document = WordprocessingDocument.Open(stream, true))
    {
        OfficeDocument.ModifyDocument(document);
        this.SetBinaryRepresentation(stream.ToArray());
        stream = null;
    }
}
finally
{
    if (stream != null)
    {
        stream.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

我最初使用了两个 using 块(一个用于 MemoryStream,第二个用于 WordprocessingDocument),但收到警告 CA2202:“对象‘流’可以在方法中多次处理......”根据MSDN 文章,我修改了代码到上面(将外部使用转换为尝试),但我仍然收到此警告。

我不确定如何构造此方法以确保在流上只调用一次 Dispose。我不想简单地取消此警告,因为 MSDN 文章指出您不应该依赖 Dispose 可以多次安全调用。

c# ca2202

4
推荐指数
1
解决办法
4159
查看次数

如何在没有模式信息的情况下将C#对象序列化为xml?

这是我所做的:

可序列化的类:

[Serializable()]
public class Ticket
{
    public string   CitationNumber { get; set; }
    public decimal Amount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后将模型序列化为xml:

var model = cart.Citations
    .Select(c => new Ticket(c.Number, c.Amount)).ToList();
var serializer = new XmlSerializer(typeof (List<Ticket>));
var sw = new StringWriter();
serializer.Serialize(sw, model);
return sw.ToString();
Run Code Online (Sandbox Code Playgroud)

输出sw.ToString()就像

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfTicket xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Ticket>
<CitationNumber>00092844</CitationNumber>
<Amount>20</Amount>
</Ticket>
</ArrayOfTicket>  
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以自定义Serialize()输出以删除那些模式信息,例如:<?xml version="1.0" encoding="utf-16"?>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

以及如何将根元素更改ArrayOfTicket为其他内容?

我可以控制这些输出吗?

c# xml serialization

2
推荐指数
1
解决办法
4781
查看次数

标签 统计

c# ×2

ca2202 ×1

serialization ×1

xml ×1